我使用下面的代码来测试窗口句柄。
新页面将在新选项卡中打开,但switchTo
命令不会切换到它。
public static void main(String[] args) {
Actions act = new Actions(driver);
driver.get("https://www.google.co.in");
String parentWin = driver.getWindowHandle();
act.keyDown(Keys.LEFT_CONTROL).perform();
driver.findElement(By.linkText("Images")).click();
for(String newWindow: driver.getWindowHandles()){
driver.switchTo().window(newWindow);
driver.findElement(By.id("lst-ib")).sendKeys("hello world");
driver.findElement(By.name("btnG")).click();
driver.close();
}
driver.switchTo().window(parentWin);
driver.findElement(By.linkText("Gmail")).click();
}
此代码在此处投票为正确答案:来自@CODEBLACK
的How to handle the new window in Selenium WebDriver using Java?答案 0 :(得分:1)
我对其工作原理的理解是每个驱动程序实例都是浏览器,而不是选项卡。但是......当我查找如何执行此操作时,我看到代码示例表明您的代码应该正常工作。所以我不确定它是否曾经工作过,现在没有,或者如果他们说的是标签但是意味着新的浏览器窗口......不管怎样,我找到了解决方案。有两种方法可以做到这一点。
在新的浏览器窗口而不是标签页中打开新页面。这是一个简单的修复...你只需将你的CTRL按键更改为SHIFT。
act.keyDown(Keys.SHIFT).perform();
我没试过的另一种方法,但在下面的链接中有描述。它主要涉及使用CTRL + TAB键盘快捷键来移动打开的选项卡。您将不得不追踪自己的位置,并且根据打开的标签数量,这可能非常快。但
http://design-interviews.blogspot.com/2014/11/switching-between-tabs-in-same-browser-window.html
我会推荐#1,因为它感觉不那么hacky但你可能要求它在标签中打开并且必须与#2一起使用。