专注于新打开的标签

时间:2019-10-18 13:29:28

标签: selenium selenium-webdriver

我在应用程序中单击一个登录按钮,这会导致打开新标签页,但是Chrome仍然可以在旧标签页上运行新标签页ChromeDriver的内容。

问题::如何使ChromeDriver“跟随”新打开的标签页,以便我可以与其中的元素进行交互?

4 个答案:

答案 0 :(得分:1)

您只需要切换到新标签。

默认情况下,硒驱动程序将保留在该驱动程序打开的第一个选项卡上。

Selenium使用这两种方法来处理它。

  1. driver.getWindowHandle() [它将获得当前标签页的句柄]
  2. driver.getWindowHandles() [它将获得所有的选项卡句柄 打开]

因此,您需要将所有选项卡存储在变量中,并一一处理。

请参见以下示例。

//I am using a set string "allWindowHandles1" to store all the tabs.
//I am using a simple string "handle1 " to handle the tabs one by one[if present]
//You can use the below for each loop in future if there is multiple child windows also
Set<String> allWindowHandles1 = driver.getWindowHandles();
for(String handle1 : allWindowHandles1) {
    Thread.sleep(2000);
    driver.switchTo().window(handle1);

    //You can write your code to handle the elements in the child window here
    //Now the driver will be in your child window
    Thread.sleep(2000);
}

答案 1 :(得分:1)

当您使用硒打开另一个选项卡时,即使它打开了另一个选项卡,它仍将在父选项卡(get方法内部/在get方法中调用的那个)上运行,以便在子选项卡(新打开的选项卡)上运行),您需要这样做

/dbfs/tmp/

答案 2 :(得分:1)

    String winHandleNew = driver.getWindowHandle();
    //Go through loop to get handle of newest window opened
    for(String winHandle : driver.getWindowHandles()){
        winHandleNew = winHandle;
    }
    // Switch to newest window opened
    driver.switchTo().window(winHandleNew);

答案 3 :(得分:0)

您需要先进行切换,使用.switchTo().window

//handle original window
String original = driver.getWindowHandle();

//do something here to bring new window
btn.click();

for(String handle: driver.getWindowHandles()) {
    driver.switchTo().window(handle);
    if(!driver.getWindowHandle().equals(original)) {
        //perform with new window

    }
}

//back to original window
driver.switchTo().window(original);

使用上述代码,您可以再次切换到原始窗口。