与Selenium 2一起使用的代码停止了与Selenium 3的合作。
此代码在Chrome或Firefox中都不再有效。
driver.get("http://the-internet.herokuapp.com/windows");
String firstWindow = driver.getWindowHandle();
driver.findElement(By.linkText("Click Here")).click();
driver.switchTo().window(firstWindow);
我发现对于Firefox有一种解决方法:
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL, Keys.PAGE_DOWN);
然而,Chrome无效 请帮忙
答案 0 :(得分:1)
我认为你确实患上了一个新的错误(或者可能是预期的行为?)。
在检查完代码并对其进行测试后,我注意到即使新的标签页打开并集中在Chrome中,driver
也不会自动切换到该标签。
您必须添加.switchTo().window(secondWindow)
,以便driver
切换到新的(和有效)标签。
所以.switchTo()
没有关注driver
正在使用的标签,因此看起来您只是留在第二个标签中,即使driver
本身切换回第一个窗口。
以下是一些可能有助于您了解问题的代码:
driver.get("http://the-internet.herokuapp.com/windows");
String firstWindow = driver.getWindowHandle();
System.out.print("First windowhandle: " + firstWindow + "\n");
System.out.print("Clicking on 'Click Here' \n");
driver.findElement(By.linkText("Click Here")).click();
Set<String> stringSet = driver.getWindowHandles();
System.out.print("All windowhandles: " + stringSet + "\n");
List<String> handles = new ArrayList<>(stringSet);
System.out.print("Switching to new window \n");
driver.switchTo().window(handles.get(1));
//wait for Title to change to second tab title
new WebDriverWait(driver, 10).until(ExpectedConditions.titleIs("New Window"));
System.out.print("Second (and current) windowhandle: " + driver.getWindowHandle() + "\n");
System.out.print("Switching back to first Window. \n");
driver.switchTo().window(firstWindow);
//wait for Title to change back to first title
new WebDriverWait(driver, 10).until(ExpectedConditions.titleIs("The Internet"));
System.out.print("Last used windowhandle: " + driver.getWindowHandle() + "\n");
如果您运行此代码,您会注意到两件事:
a)driver
将切换到正确的标签(请参阅WindowHandle
输出)
b)driver
使用的当前使用的标签将无法正确关注Chrome
这似乎是一个错误。