我可以在运行Selenium测试时处理事件吗?

时间:2011-06-29 19:41:13

标签: javascript extjs selenium

我是Selenium新手...

作为一名JavaScript程序员,我想我想在Selenium-2测试(JUnit)中处理JavaScript事件。我加入了一个团队,所有现有的测试都有“waitForSomethingToBeRendered”方法。我的Selenium测试能否处理/监听DOM(或自定义)事件?

另外,我已经阅读了开发人员使用FireBug来编写/调试Selenium-2测试的SO。这是如何运作的?我没有在Selenium推出的浏览器中看到FireBug。同样,为什么以下似乎没有效果?我在尝试Selenium / JUnit不支持吗?

selenium().getEval("alert('hello');");
selenium().getEval("debugger;");

3 个答案:

答案 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()