3

我才刚刚开始使用 Selenium,所以我还在纠结所有的移动部件。我已经启动并运行了我的第一个测试套件,但我一生都无法让 jQuery 事件侦听器在 IE 中触发。

这在动态 AJAX 下拉列表中尤其成问题,例如$('#country').live('change',showStates) select -> id=country | label=United States

selenium 驱动程序触发事件以响应所有其他浏览器的测试脚本,但我没有尝试过导致或强制change触发事件。我已经尝试使用我可以在 SO 上找到的所有方法,包括:

这些命令都不会在 IE9、8(模拟)或 7(模拟)中触发事件。FWIW 目前尚不清楚这些是否真的导致事件在其他浏览器中触发,因为其他浏览器在change没有额外调用的情况下触发事件。我在 Windows 7 上运行独立的 selenium jar 2.33。

如何使用 selenium 在 IE 中触发更改事件?

4

2 回答 2

1

根据我的经验,直接触发 javascript/jQuery 并不是最安全的处理方式。而是尝试使用 UI 交互来模拟用户。例如要触发 'country.change()' 事件,只需使用 Selenium 在 country 字段中更改国家(您可能必须在该字段之外使用制表符)。我相信这是预期用途。

我发现一些下拉列表可能很痛苦。我会在您的下拉列表中尝试以下一组操作:

  1. 获取当前选择的选项(在 DDL 的最顶层元素上调用 getText)
  2. 单击 DDL(以显示选项
  3. 获取显示选项列表
  4. 发现当前选项和预期之间的距离
  5. 发送适当数量的 DOWN 或 UP 键(取决于方向),然后是 ENTER 或 TAB 键

在使用第三方 UI 包时,我不得不遵循这种过程,该包将 DDL 的格式与处理 DDL 的操作分开。这意味着当 Selenium 与它所使用的元素交互时,不会发生预期的效果,因为它们是由 javascript 在其他地方处理的,而在 Selenium 具有句柄的元素的上下文中是没有的。发送密钥会模仿用户的操作并强制 javascript 自行执行。让我知道这是否不清楚以及它是否有效。

于 2013-06-04T01:19:03.250 回答
0

通过执行会触发它的操作来触发 change 事件。这是 WebDriver 哲学的基本部分。

如果您的下拉菜单是使用标准<select><option>标签实现的,则可以使用Select实用程序类。

WebElement country = driver.findElement(By.id("country"));
Select selector = new Select(country);
selector.selectByVisibleText("Lithuania");

除非新选项不同,否则这不会触发更改,也可以为您节省一些条件逻辑。

于 2013-06-11T06:20:41.093 回答