【发布时间】:2011-07-27 16:26:37
【问题描述】:
我正在通过 JBehave-Web 分发版 (3.3.4) 使用 Webdriver 来测试应用程序,但我遇到了一些很奇怪的事情:
我正在尝试与 Richfaces 中的 modalPanel 进行交互,这给了我很多问题,因为它抛出了 ElementNotVisibleException。我通过使用 javascript 解决了它:
这是从 org.jbehave.web.selenium.WebDriverPage 扩展而来的页面对象中的代码
protected void changeModalPanelInputText(String elementId, String textToEnter){
makeNonLazy();
JavascriptExecutor je = (JavascriptExecutor) webDriver();
String script ="document.getElementById('" + elementId + "').value = '" + textToEnter + "';";
je.executeScript(script);
}
奇怪的行为是,如果我正常执行测试,它什么也不做,但是如果我在最后一行(在 Eclipse 中)放置一个断点,选择该行并从 Eclipse 执行(Ctrl + U),我可以看到浏览器的变化。
我检查了 JavascriptExecutor 和 WebDriver 类以查看是否有任何类型的缓冲,但我找不到任何东西。有什么想法吗?
编辑 我发现让线程休眠 1 秒钟可以让它工作,所以它看起来是某种竞争条件,但不知道为什么......
这是它“工作”的方式,但我对此不太满意:
protected void changeModalPanelInputText(String elementId, String textToEnter){
String script ="document.getElementById('" + elementId + "').value = '" + textToEnter + "';";
executeJavascript(script);
}
private void executeJavascript(String script){
makeNonLazy();
JavascriptExecutor je = (JavascriptExecutor) webDriver();
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
e.printStackTrace();
}
je.executeScript(script);
}
将等待放在任何其他位置也不起作用...
【问题讨论】:
标签: javascript testing selenium webdriver