IE上的Java中无法使用Selenium WebDriver获取新的窗口句柄

当我单击页面上的按钮(在IE浏览器中)时,将打开一个新的弹出页面。我尝试获取此弹出窗口的窗口句柄失败。这是我的第一次尝试:

String baseWin = driver.getWindowHandle();

System.out.println(baseWin);

Set<String>s = driver.getWindowHandles();

Iterator<String> ite = s.iterator();

while ( ite.hasNext() ) {

String popUpHandle = ite.next();

if(!baseWin.equals(popUpHandle)) {

driver.switchTo().window(popUpHandle);

System.out.println(driver.switchTo().window(popUpHandle).getTitle());

此尝试仅打印基本窗口的句柄,并且如果第二个print语句放置在if()语句之外,但在while()语句内以及if()语句之后,则仅输出基本窗口的标题。因此,这组句柄似乎只包含基本窗口句柄。

这是我的第二次尝试:

String baseWin = driver.getWindowHandle();

System.out.println(baseWin);

ArrayList<String> popUpWin = new ArrayList<String>(driver.getWindowHandles());

popUpWin.remove(baseWin);

driver.switchTo().window(popUpWin.get(0));

System.out.println(driver.switchTo().window(popUpWin.get(0)));

尝试返回一个错误,该错误表明数组popUpWin为空,即size

==0。因此,当我调用driver.getWindowHandles()时,不会检索弹出窗口的句柄,而仅包含基本窗口的句柄。这是IE问题吗?有解决方法吗?还是我忽略了代码中的某些内容?(请注意,我忽略了此处包含的代码中的暂停,所以我不认为这是问题所在。)

回答:

您需要做两件事:

  1. 在IE浏览器中更改安全设置:

打开IE浏览器,单击“ Internet选项” =>“安全” =>选中“启用保护模式”,以表示“

Internet”,“本地Intranet”,“受信任的站点”和“受限制的站点”。

这使IE驱动程序能够控制新窗口的句柄,以便在调用

driver.getWindowHandles();driver.getWindowHandles().size();

时将获得所有句柄,包括原始窗口和新窗口。为了更加准确,您只需要将所有4个域的安全设置都设置为相同即可,这意味着您可以取消选中所有4个域的“启用保护模式”,但是显然不建议这样做。

  1. 调用之后driver.switchTo().window(windowName);,需要添加((JavascriptExecutor) driver).executeScript("window.focus();");IE驱动程序才能在窗口上执行任何操作。

这是因为IE驱动程序需要它正在处理的窗口在前台,因此此行可帮助驱动程序获得窗口的焦点,以便它可以对所需的窗口执行任何操作。

以下是一个完整的示例:

    String baseWin = driver.getWindowHandle();

//Some methods to open new window, e.g.

driver.findElementBy("home-button").click();

//loop through all open windows to find out the new window

for(String winHandle : driver.getWindowHandles()){

if(!winHandle.equals(baseWin)){

driver.switchTo().window(winHandle);

//your actions with the new window, e.g.

String newURL = driver.getCurrentUrl();

}

}

//switch back to the main window after your actions with the new window

driver.close();

driver.switchTo().window(baseWin);

//let the driver focus on the base window again to continue your testing

((JavascriptExecutor) driver).executeScript("window.focus();");

以上是 IE上的Java中无法使用Selenium WebDriver获取新的窗口句柄 的全部内容, 来源链接: utcz.com/qa/423048.html

回到顶部