Java 如何使用Selenium切换到新窗口?
在我的代码中,我使用selenium访问了一个页面,其中有一个链接在同一页面上作为弹出窗口打开,但该链接正在使用,因此它就像在新窗口中打开的新页面一样 我可以单击该链接并打开指向的页面,但当我执行driver.getWindowHandles()时,它返回的大小仅为1,而不是2,因此我无法切换到新窗口 以下是我正在使用的代码:Java 如何使用Selenium切换到新窗口?,java,selenium,Java,Selenium,在我的代码中,我使用selenium访问了一个页面,其中有一个链接在同一页面上作为弹出窗口打开,但该链接正在使用,因此它就像在新窗口中打开的新页面一样 我可以单击该链接并打开指向的页面,但当我执行driver.getWindowHandles()时,它返回的大小仅为1,而不是2,因此我无法切换到新窗口 以下是我正在使用的代码: String parent = driver.getWindowHandle(); driver.findElement(By.xpath("//a[@i
String parent = driver.getWindowHandle();
driver.findElement(By.xpath("//a[@id='abc']")).click();
// after clicking on the link
try{
Thread.sleep(1000);
Set<String> availableWindows = driver.getWindowHandles();//this set size is
// returned as 1 and not 2
String newWindow = null;
for (String window : availableWindows) {
if (!parent.equals(window)) {
newWindow = window;
}
}
assertNotNull(newWindow);
// switch to new window
driver.switchTo().window(newWindow);
// do assert the elements in the new window
// and then close the new window
driver.close();
// switch to parent
driver.switchTo().window(parent);
// close main window
driver.close();}
catch(Exception e){
String parent=driver.getWindowHandle();
findElement(By.xpath(“//a[@id='abc']”)。单击();
//点击链接后
试一试{
睡眠(1000);
Set availableWindows=driver.getWindowHandles();//此集合大小为
//返回为1而不是2
字符串newWindow=null;
用于(字符串窗口:可用窗口){
如果(!parent.equals(窗口)){
新窗口=窗口;
}
}
assertNotNull(新窗口);
//切换到新窗口
driver.switchTo().window(newWindow);
//在新窗口中断言元素
//然后关闭新窗口
driver.close();
//切换到父级
driver.switchTo()窗口(父窗口);
//关闭主窗口
driver.close();}
捕获(例外e){
由于弹出窗口是主窗口本身的一部分,即,为什么我不能通过执行getWindowHandle()获得正确的大小
但我的要求是只保存弹出页面。
现在,保存代码正在保存母版页详细信息以及弹出内容,因为每次调用母版页驱动程序时
是否有任何解决办法,我可以做的只是获得弹出页面的驱动程序
保存代码是通用的,这在本参考中并不重要。
我只想在单击链接后获得弹出页面的驱动程序,您需要等待Selenium意识到现在总共有2个窗口
String parent = driver.getWindowHandle();
driver.findElement(By.xpath("//a[@id='alertHistoryLink']")).click();
// after clicking on the link
// call the method numberOfWindowsToBe as follows
WebDriverWait wait = new WebDriverWait(driver, 15, 100);
wait.until(numberOfWindowsToBe(2));
public static ExpectedCondition<Boolean> numberOfWindowsToBe(final int numberOfWindows) {
return new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
driver.getWindowHandles();
return driver.getWindowHandles().size() == numberOfWindows;
}
};
}
将解决问题。不工作。它在进入NumberOfWindowTobe方法之前终止。它仍然返回大小为1@user2478636这只意味着弹出窗口不是一个窗口。它属于同一个页面。不要在弹出窗口上进行任何切换和执行任何您想要的操作。将弹出窗口的html添加到问题a中在弹出窗口中指定要执行的操作。
<html>
<head>
.....
</head>
<body>
...
...
..
<div id = popup>
//html elements present in popup
</div>
...
..
</head>
</html>
String htmlInsidePopup = popup.getAttribute("innerHTML");
System.out.println(htmlInsidePopup);