Selenium 当目标位于IFrame中时,如何从ChromeWebDriver和InternetExplorerWebDriver调用JavaScript

Selenium 当目标位于IFrame中时,如何从ChromeWebDriver和InternetExplorerWebDriver调用JavaScript,selenium,webdriver,selenium-webdriver,google-chrome-devtools,Selenium,Webdriver,Selenium Webdriver,Google Chrome Devtools,我正在使用Selenium 2b1,并在驱动Firefox(MacOS和Windows)时获得了良好的效果。我们想对IE和Chrome进行同样的测试。在为ChromeDriver添加了一些变通方法之后,我发现ChromeDriver和InternetExplorerDriver在executeScript()中都失败了,即使在driver.switch to().frame(canvasName)之后的脚本是“return”Hello!”。ChromeDriver报告“不在页面上,因此无法执行j

我正在使用Selenium 2b1,并在驱动Firefox(MacOS和Windows)时获得了良好的效果。我们想对IE和Chrome进行同样的测试。在为ChromeDriver添加了一些变通方法之后,我发现ChromeDriver和InternetExplorerDriver在executeScript()中都失败了,即使在driver.switch to().frame(canvasName)之后的脚本是“return”Hello!”。ChromeDriver报告“不在页面上,因此无法执行javascript”,而InternetExplorerDriver报告“javascript错误”

下面是Groovy代码:

selenium.switchTo().frame(canvasName)

log.info("Canvas open.  Waiting for Game to load.");
waitFor(selenium, 30) {
    selenium.findElement(By.id("Game")).click()
}

waitFor(selenium, 30) {
    def eval = null
    try {
        eval = selenium.executeScript("return document.URL")
        log.fine("executeScript returns [$eval]")
    } catch(Exception e) {
        log.fine("Exception from executeScript: $e.message")
    }
    return eval
}
变量selenium在RemoteWebDriver实例中具有。waitFor方法创建WebDriverWait的实例,并将引用closure参数的包装器实例作为until参数传递。请注意,id为“Game”的元素仅存在于由上述代码中的第一条语句选择的IFrame中


希望有人有这方面的经验

问题在于Selenium 2.0b1中InternetExplorerDriver和ChromeDriver版本的局限性。Selenium 2.0b2版本包括一个改进的InternetExplorerDriver,它支持切换到IFrame并针对其DOM运行JavaScript。一个更强大的ChromeDriver还在后头。不幸的是,没有提到ChromeDriver的计划(或支持Safari的可能性)。

现在发布了ChromeDriver,很明显(剩下的)问题是ChromeDriver:在新版本中,InternetExplorerDriver在相同的测试中发挥了神奇的作用!如果您有一个想法,如何获得比2b2更晚的ChromeDriver,我将不胜感激!