【问题标题】:Unable to switch focus to newtab/window in Internet Explorer using Selenium Webdriver无法使用 Selenium Webdriver 将焦点切换到 Internet Explorer 中的新选项卡/窗口
【发布时间】:2016-11-14 19:12:33
【问题描述】:
这里的问题是,我无法同时关注新选项卡/窗口,而是焦点仍然在第一个。请帮忙。
driver=new InternetExplorerDriver();
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");
//driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"n");
for (String winHandle : driver.getWindowHandles())
{
driver.switchTo().window(winHandle);
}
driver.get("https://google.com/");
【问题讨论】:
标签:
java
internet-explorer
selenium
selenium-webdriver
【解决方案1】:
IE 驱动程序不支持枚举窗口中的选项卡。此外,WebDriver 通常不支持自动“手动”打开选项卡,例如使用 Control+t 打开的选项卡。特定的驱动程序可能支持该功能,但它不是 API 合同的全球支持部分。
绝大多数时候,用户都在尝试“手动打开一个新标签,切换到它,然后自动化它”,这个用例并没有被完全考虑清楚。由于您拒绝说明为什么要执行此操作,而不是在新窗口中启动新的驱动程序实例,因此无法推测您应该采取什么行动。
【解决方案2】:
实现您所要求的最简单的方法是遵循以下原则:
- 获取初始窗口的句柄。
- 打开新窗口。
- 此时获取所有打开窗口的句柄列表,并删除初始窗口句柄。
- 切换到上一步检索到的列表中剩余的窗口句柄。
【解决方案3】:
试试this,打开标签后使用Java机器人切换它。以下代码使用解决您问题的相同原理。
ArrayList<String> tabs2 = new ArrayList<String>(driver.getWindowHandles());
System.out.println(tabs2.size());
for (int i = tabs2.size()-1; i>=0; i--) {
Thread.sleep(2000);
driver.switchTo().window(tabs2.get(i));
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_CONTROL);
System.out.println(driver.getTitle() + "i: " + i);
driver.close();
}