我使用Selenium 2,我需要在页面中执行一些JavaScript作为测试的一部分。 我看到网络上的各种例子,其中没有一个人似乎工作。
我需要做的就是:用户与网页,按下按钮后相互作用,添加文字等,我需要得到用户的选择,这是原始的javascript:
public void jsTest() {
WebDriver driver = new FirefoxDriver();
driver.navigate().to("http://www.tinymce.com/");
WebElement iframe = driver.findElement(By.tagName("iframe"));
driver.switchTo().frame(iframe);
WebElement body = driver.findElement(By.xpath("//body"));
body.sendKeys("Write something");
JavascriptExecutor js;
js = (JavascriptExecutor)driver;
Object o = js.executeScript("return document.querySelector('iframe')");
System.out.println("o = " + o);
driver.close();
driver.quit();
}
这段代码的结果始终是document.querySelector
是不确定的。
另外我也试过路过第二个参数给js.executeScript
:
public void jsTest() {
WebDriver driver = new FirefoxDriver();
driver.navigate().to("http://www.tinymce.com/");
WebElement iframe = driver.findElement(By.tagName("iframe"));
driver.switchTo().frame(iframe);
WebElement body = driver.findElement(By.xpath("//body"));
body.sendKeys("Write something");
JavascriptExecutor js;
js = (JavascriptExecutor)driver;
Object o = js.executeScript("return arguments[0].querySelector('iframe')", iframe);
System.out.println("o = " + o);
driver.close();
driver.quit();
}
在这种情况下,我得到:org.openqa.selenium.StaleElementReferenceException:元素属于不同的帧比当前一个 - 切换到其包含框架使用它
我还发现,它有可能使用BrowserBot: this.browserbot.getUserWindow()
或selenium.browserbot.getUserWindow()
但它似乎并没有工作了。
我这样做的原因是,我需要得到用户的选择,同时输入,例如光标位置,这是可能的纯JavaScript和: document.getSelection()
我可以考虑其他方式来获得相同的结果。
我究竟做错了什么? 我怎样才能解决这个问题?