关注新打开的标签页

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关注新打开的标签页相关的知识,希望对你有一定的参考价值。

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

问题:如何使ChromeDriver“跟随”新打开的选项卡,以便与其中的元素进行交互?

答案

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

    //storing all the windows opened by default parent is index 0
    Set<String>ids=driver.getWindowHandles(); 
    Iterator<String> it = ids.iterator();
    String parentId = it.next(); //1st one = parent tab
    String childId = it.next(); //2nd one = child tab

    driver.switchTo().window(childId); //switch to child window 
    System.out.println(driver.getTitle());
    driver.switchTo().window(parentId); //switches back to parent window
另一答案

您只需要切换到新选项卡。

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

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);
}

以上是关于关注新打开的标签页的主要内容,如果未能解决你的问题,请参考以下文章

新标签页中的 HTML 按钮打开链接

在新标签页中打开以进行打印

如何使用扩展和硒打开一个新的标签页?

如何在打开新标签时总是切换到新标签页?

Nuxt:如何在新标签页中打开页面

如何新打开一个标签页后,页面不跳转到新的标签页,而是停留在当前标签页?