我是 Selenium 学习的新手。 WebDriver.getWindowHandle()documentation对我来说不是很清楚,并且该示例未如书中所给出的那样起作用,因此我想到了确认此方法返回的值。
1)假设我在第PAGE1页上。因此,getWindowHandle()应该将句柄返回到PAGE1。 (正确的)
2)现在从此页面转到PAGE2(通过超链接并打开一个新窗口)。我的书说,现在getWindowHandle()应该将句柄返回PAGE2。 但是我的程序仍将句柄返回PAGE1。
Selenium v2.43
在Firefox和Chrome上均可重现。
问题:getWindowHandle()应该返回的确切值是什么?
WebDriver wd = new ChromeDriver();
wd.get("file://D:/Projects/Selenium/Startup/web/ch3/switch_main.html");
String h1 = wd.getWindowHandle();// original handle
System.out.println("First handle = " + h1);
WebElement clickhere = wd.findElement(By.id("clickhere"));
clickhere.click();//moved to a new child page<
String h2 = wd.getWindowHandle();
System.out.println("Second handle = " + h2);// this handle is not different than h1
最佳答案
getWindowHandle()
将获取webDriver当前正在控制的页面的句柄。该句柄是网页的唯一标识符。每次打开页面时,即使它是相同的URL,也会有所不同。getWindowHandles()
(不要忘记's')将为您提供Web驱动程序可以理解的所有页面的所有句柄。请注意,当您将它们放在列表中时,将按照打开它们的顺序列出它们。
您可以使用SwitchTo().Window("handle")
切换到所需的窗口。
如果您知道窗口ID,则可以使用SwitchTo().Window("mywindowID")
。SwitchTo().Window("")
将始终返回到基本/主窗口。SwitchTo().Frame("popupFrame")
将进入Webdriver当前正在控制的窗口的弹出窗口。