簡體   English   中英

如何使用 Selenium WebDriver 打開多個窗口

[英]How to open multiple windows using Selenium WebDriver

我試圖使用 Selenium WebDriver 了解“在多個窗口之間切換”,但為此我無法使用 driver.get() 或 driver.navigate.to() 打開多個窗口,這會在同一窗口中打開鏈接。 有人可以幫助我使用同一個驅動程序實例打開多個窗口嗎? 我已經提供了我的示例代碼。 n 的值是 1 而不是 2 作為它在同一窗口中的開口。 請幫忙。

public class MultipleWindows {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        WebDriver driver = new FirefoxDriver();

        driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);


        driver.get("http://www.google.com");

        driver.navigate().to("http://www.facebook.com");


        int n = driver.getWindowHandles().size();
        System.out.println(n);

    }

}

這也會做

這將創建一個新選項卡/窗口並打開給定的 url

String url="whatever url or empty to open a empty tab";
((JavascriptExecutor) driver).executeScript("window.open(arguments[0])", url);

WebDriver navigate().to()get()做完全一樣的事情 沒有打開新窗口的 API,但您可以使用ctrl+n熱鍵:

    WebDriver driver = new FirefoxDriver();
    WebElement body = driver.findElement(By.tagName("body"));
    body.sendKeys(Keys.chord(Keys.CONTROL, "n"));
    System.out.println(driver.getWindowHandles().size());
    driver.quit();

或者您可以使用 WebDriver 的幾個實例(請參閱Selenium Java 打開新窗口,關閉它,然后再次控制主窗口

那里開始的另一種方式

        WebDriver driver = new ChromeDriver();
        driver.get(adminToolURL);
        Set<String> windows = driver.getWindowHandles();
        String adminToolHandle = driver.getWindowHandle();
        ((JavascriptExecutor) driver).executeScript("window.open();");
        Set<String> customerWindow = driver.getWindowHandles();
        customerWindow.removeAll(windows);
        String customerSiteHandle = ((String) customerWindow.toArray()[0]);
        driver.switchTo().window(customerSiteHandle);
        driver.get(customerSiteURL);
        driver.switchTo().window(adminToolHandle);

希望這可以幫助!

我用了明確的方式。 我創建了驅動程序 A 和驅動程序 B,然后我可以打開 2 個窗口並在沒有任何錯誤的情況下對其進行操作:

private WebDriver driverA;
private WebDriver driverB;

@BeforeClass(alwaysRun = true)
private void executeBeforeClass() {
    driverB = BrowserFactory.startBrowser(browser, baseUrl);
    driverA = BrowserFactory.startBrowserAsIncognito(browser, baseUrl);
}

@AfterClass(alwaysRun = true)
public void runAfterClass(){
    if(driverA!=null){
        driverA.quit();
    }
    if(driverB!=null){
        driverB.quit();
    }
}



@Test
public void shouldEhcacheWorkFine() {

    new LoginPage(driverA).loginToTomcatA(login, password)
            .goToListCompaniesPage()
            .goToEditFirstCompanyPage()
            .setPersonName(NAME);

    EditPage editPageB = new LoginPage(driverB).loginToTomcatB(login, password)
            .goToListCompaniesPage()
            .goToEditFirstCompanyPage();
    assertThat(editCompanyPageB.getPersonName(), is(NAME));
}

調用driver.get("http://www.google.com"); , 要打開新窗口,請遵循以下方法。

使用.sendKeys方法:

String multipleKeys = Keys.chord(Keys.CONTROL, "t");
driver.findElement(By.tagName("body")).sendKeys(multipleKeys);

使用Actions

Actions action = new Actions(driver);
action.keyDown(Keys.CONTROL).sendKeys("t").keyUp(Keys.CONTROL).build().perform();

*注意:對於Mac OS請將Keys.CONTROL更改為Keys.COMMAND

使用JavascriptExecutor

  • 打開新的空白窗口:
((JavascriptExecutor) driver).executeScript("window.open()");
  • 使用特定網址打開新窗口:
((JavascriptExecutor) driver).executeScript("window.open('https://google.com')");

希望這可以幫助。

for (int i = 1; i < 10; i++) {
            ((JavascriptExecutor) driver).executeScript("window.open('https://www.google.com/')");
            ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
            driver.switchTo().window(tabs.get(i));
            Thread.sleep(2000);
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM