打开和切换选项卡时如何更新 FirefoxDriver (WebDriver) 对象?

How to update a FirefoxDriver (WebDriver) object when opening, and switching between tabs?

潜伏已久;第一次海报。我是 Selenium API 和 WebDriver 的新手,遇到了一个小问题。

简而言之,我正在尝试使用 Selenium 的 FirefoxDriver 来利用 Firefox 选项卡功能,但是在选项卡之间切换时,我的驱动程序实例对象没有使用其 getCurrentUrl() 方法返回正确的 URL。这是我正在努力完成的一个简短示例:

FirefoxDriver driver = new FirefoxDriver();
driver.get("http://www.google.com");
// display starting tab URL
System.out.println(driver.getCurrentUrl()); // expected output: google.com
WebElement body = driver.findElement(By.cssSelector("body"));
// open new tab
if(System.getProperty("os.name").contains("Mac")) {
    body.sendKeys(Keys.COMMAND + "t");
}
else {
    body.sendKeys(Keys.CONTROL + "t");
}
//navigate in new tab
driver.get("http://www.yahoo.com");
// display new tab URL
System.out.println(driver.getCurrentUrl()); // expected output: yahoo.com
//navigate back to previous tab
body = driver.findElement(By.cssSelector("body"));
body.sendKeys(Keys.CONTROL +""+Keys.SHIFT +""+ Keys.TAB);
// display starting tab URL
System.out.println(driver.getCurrentUrl()); // expected output: google.com
driver.close();

但是,在执行时输出显示为:

google

yahoo

yahoo

我的直觉表明驱动程序的 frame/tab 视图没有更新得足够快,或者根本没有更新,但我不确定如何确定这一点。任何帮助将不胜感激。

谢谢!

我找到了一个 solution/workaround 来纠正 driver 的当前观点。 driver 切换到不同的选项卡后,必须调用 switchTo().defaultContent()。

工作代码如下:

FirefoxDriver driver = new FirefoxDriver();
driver.get("http://www.google.com");
// display starting tab URL
System.out.println(driver.getCurrentUrl()); // expected output: google.com
WebElement body = driver.findElement(By.cssSelector("body"));
// open new tab
if(System.getProperty("os.name").contains("Mac")) {
    body.sendKeys(Keys.COMMAND + "t");
}
else {
    body.sendKeys(Keys.CONTROL + "t");
}
//navigate in new tab
driver.get("http://www.yahoo.com");
// display new tab URL
System.out.println(driver.getCurrentUrl()); // expected output: yahoo.com
//navigate back to previous tab
body = driver.findElement(By.cssSelector("body"));
body.sendKeys(Keys.CONTROL +""+Keys.SHIFT +""+ Keys.TAB);
// refresh driver view
driver.switchTo().defaultContent();
// display starting tab URL
System.out.println(driver.getCurrentUrl()); // expected output: google.com
driver.close();

新的结果输出现在符合预期:

google

yahoo

google