在我的代码中,我已经使用selenium到达了一个页面,有一个链接在同一页面上作为弹出窗口打开,但该链接正在使用,所以它就像一个在新窗口中打开的新页面。
我能够点击该链接并打开页面,但是当我正在执行driver.getWindowHandles()时,它返回的大小仅为1而不是2,因为我无法切换到新窗口。
以下是我正在使用的代码:
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){
由于弹出窗口是主窗口本身的一部分,即,为什么我无法通过执行getWindowHandle()得到正确的大小;
但我的要求是仅保存弹出页面。 现在,每次调用母版页驱动程序时,保存代码都会保存母版页详细信息以及弹出内容。
我是否可以采取任何解决方法来获取弹出页面的驱动程序?
保存代码是通用的,在此参考中并不重要。 我想要的只是获取弹出页面的驱动程序
答案 0 :(得分:0)
点击链接后,你需要等到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;
}
};
}
我想要的只是获取弹出页面的驱动程序
编辑:主窗口的驱动程序是弹出窗口的驱动程序,因为弹出窗口本身是主窗口的一部分。唯一的例外是,如果弹出窗口存在于框架中,则需要切换到框架,然后您可以对弹出窗口中的元素执行操作。
编辑:如果我理解正确,你想获得弹出窗口的页面源代码。由于弹出窗口是主窗口的一部分。我会做的是
popup.getAttribute( “innerHTML的”); 弹出窗口的类型为WebElement。
例如,如果主窗口的HTML类似于
<html>
<head>
.....
</head>
<body>
...
...
..
<div id = popup>
//html elements present in popup
</div>
...
..
</head>
</html>
然后
WebElement popup = driver.findElement(By.xpath("//div[@id='popup']"));
String htmlInsidePopup = popup.getAttribute("innerHTML");
System.out.println(htmlInsidePopup);
将解决问题。