Selenium web驱动程序| java |无法在firefox浏览器窗口之间切换

Selenium web驱动程序| java |无法在firefox浏览器窗口之间切换,java,firefox,selenium,webdriver,Java,Firefox,Selenium,Webdriver,使用SeleniumWebDriver 2。爪哇 我想在两个firefox浏览器窗口之间来回切换。当我这样做时,我得到:org.openqa.selenium.NoSuchWindoException:无法浏览窗口“{accb1cc2-74c9-3b4e-8f71-c0b184a037c4}”;持续时间或超时: 以下是java: driver = new FirefoxDriver(); driver.get("http://mail.google.com"); String firstWin

使用SeleniumWebDriver 2。爪哇

我想在两个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}


非常感谢您提供的所有帮助。

不幸的是,您无法以当前尝试的方式在窗口之间切换-WebDriver在您实例化新实例后立即丢失第一个窗口

您可以尝试通过javascript打开第二个窗口,然后在其中来回切换:

window.open('http://www.bing.com','Bing','modal=yes,alwaysRaised=yes')
这有点像黑客,可能存在以下问题:

  • 弹出窗口拦截器可能会阻止该操作
  • 浏览器必须启用javascript
  • 未来的浏览器版本可能会打破这一漏洞
  • 来自同行的抱怨和抱怨(也许是正确的),因为即使它可能有效,它仍然是一种黑客行为;)
最后的一些想法:

是否有任何特殊原因使其必须是同一个驱动程序实例? 如果没有,只需在两个驱动程序实例之间切换:

FirefoxDriver driver = new FirefoxDriver();
driver.get("http://mail.google.com");

FirefoxDriver driver2 = new FirefoxDriver();
driver2.get("http://www.google.com");

在两个活动窗口之间切换:

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
FirefoxDriver wd=新的FirefoxDriver();
wd.get(“https://irctc.co.in/");
wd.manage().timeouts().implicitlyWait(5000,TimeUnit.SECONDS);
WebElement wb=wd.findElement(By.linkText(“Cabs”);
wb.click()//现在有两个窗口打开了
wd.manage().timeouts().implicitlyWait(5000,TimeUnit.SECONDS)//等待加载整个页面
设置sid=wd.getWindowHandles()//getWindowHandles()方法返回所有活动窗口的ID,其返回类型为集合集。
迭代器it=sid.Iterator()//使用迭代器,我们可以从集合中获取值。
字符串parentId=it.next();
System.out.println(parentId);
String childId=it.next();
System.out.println(childId);
wd.switchTo().window(childId)//将控件切换到子窗口
wd.close()//控件返回到父窗口