我是Selenium新手...
作为一名JavaScript程序员,我想我想在Selenium-2测试(JUnit)中处理JavaScript事件。我加入了一个团队,所有现有的测试都有“waitForSomethingToBeRendered”方法。我的Selenium测试能否处理/监听DOM(或自定义)事件?
另外,我已经阅读了开发人员使用FireBug来编写/调试Selenium-2测试的SO。这是如何运作的?我没有在Selenium推出的浏览器中看到FireBug。同样,为什么以下似乎没有效果?我在尝试Selenium / JUnit不支持吗?
selenium().getEval("alert('hello');");
selenium().getEval("debugger;");
答案 0 :(得分:1)
首先,如果您开始使用Selenium,我建议使用适用于WebDriver的2.0 API。要评估2.0中的JavaScript,只需将WebDriver对象转换为JavascriptExecutor对象并使用它提供的方法。 'waitForSomethingToBeRendered'需要在几个步骤中完成。首先,您必须确保页面上的DOM对象可用。为此你可以这样做:
WebElement e = null;
try {
e = driver.findElement( By.id("asdf") );
} catch {
...
}
或者:
driver.findElements( By.id("asdf") ).size() != 0
确定DOM对象是否可用后,您可以执行以下操作:
e.isDisplayed()
无论当前是否显示该元素,都将返回给您。
关于你所看到的关于FireBug和Selenium的内容,我猜你是混淆了Selenium IDE这是一个带有Selenium RC / WebDriver的Firefox插件,它不是一个插件。
答案 1 :(得分:1)
使用Firebug for Firefox,同时浏览您的网站以探索您的DOM,以确定在Selenium脚本中选择的正确元素和类ID。如果你正在使用extjs,那么在确定要选择哪些元素时会有一些额外的乐趣,因为extjs随机化了元素id。最好的方法是添加一个额外的css类来查找正确的元素,然后按该类选择。
答案 2 :(得分:1)
你没有看到firebug扩展,因为selenium打开了一个剥离的firefox。我猜是因为它的速度要快得多。可以(在selenium-2中很容易)添加插件。
警报不起作用,因为selenium-1(我不知道selenium-2如何处理它们)吞下警报。有处理警报的api。
另外,在selenium-1中,JS在不同的窗口中运行。因此document.getElementById()
的等价物是sel.getEval("selenium.browserbot.getCurrentWindow().document.getElementById()")
。
最后,我不了解事件,但您可以等待条件:sel.wait_for_condition()
。