使用Selenium Webdriver 2. java。
我想在两个firefox浏览器窗口之间切换回来。当我这样做时,我得到:org.openqa.selenium.NoSuchWindoException:无法放弃窗口“{accb1cc2-74c9-3b4e-8f71-c0b184a037c4}”;持续时间或超时:
这是java:
driver = new FirefoxDriver();
driver.get("http://mail.google.com");
String firstWindowHandle = driver.getWindowHandle();
System.out.println("handle of first window ="+firstWindowHandle);
Thread.sleep(1000);
driver = new FirefoxDriver();
driver.get("http://www.google.com");
// Get names of currently open windows
String secondWindowHandle = driver.getWindowHandle();
System.out.println("handle of first window ="+secondWindowHandle);
Thread.sleep(1000);
// It fails right here!
driver.switchTo().window(firstWindowHandle );
driver.get("http://www.lifehacker.com");
它将以下内容输出到控制台: - 第一个窗口的句柄= {accb1cc2-74c9-3b4e-8f71-c0b184a037c4} - 第二个窗口的句柄= {f5256619-a36e-a441-9979-937da0abacd1}
感谢所有帮助。
答案 0 :(得分:1)
不幸的是,您无法按照当前尝试的方式在窗口之间切换 - WebDriver在您实例化新实例后立即丢失了第一个窗口。
您可以尝试通过javascript打开第二个窗口,然后来回切换:
window.open('http://www.bing.com','Bing','modal=yes,alwaysRaised=yes')
这有点像黑客,可能会遇到以下问题:
最后的一些想法:
是否有任何特殊原因必须是相同的驱动程序实例? 如果没有,只需在两个驱动程序实例之间切换:
FirefoxDriver driver = new FirefoxDriver();
driver.get("http://mail.google.com");
FirefoxDriver driver2 = new FirefoxDriver();
driver2.get("http://www.google.com");
答案 1 :(得分:0)
在2个活动Windows之间切换:
FirefoxDriver wd=new FirefoxDriver();
wd.get("https://irctc.co.in/");
wd.manage().timeouts().implicitlyWait(5000,TimeUnit.SECONDS);
WebElement wb=wd.findElement(By.linkText("Cabs"));
wb.click(); //Now 2 Windows are open
wd.manage().timeouts().implicitlyWait(5000,TimeUnit.SECONDS); //Wait for the complete page to load
Set<String> sid=wd.getWindowHandles(); //getWindowHandles() method returns the ids of all active Windows and its return type will be a Collection Set.
Iterator<String> it=sid.iterator(); //Using iterator we can fetch the values from Set.
String parentId=it.next();
System.out.println(parentId);
String childId=it.next();
System.out.println(childId);
wd.switchTo().window(childId); //swtiching control to child Window
wd.close(); // control返回父窗口。