关注新打开的标签页
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使用这两种方法来处理它。
- driver.getWindowHandle() [它将获得当前选项卡的句柄]
- 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);
}
以上是关于关注新打开的标签页的主要内容,如果未能解决你的问题,请参考以下文章