【问题标题】:Firing change events in Selenium and IEx?在 Selenium 和 IEx 中触发更改事件?
【发布时间】:2013-06-03 23:34:57
【问题描述】:

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

这在动态 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 中触发更改事件?

【问题讨论】:

标签: selenium-webdriver internet-explorer jquery-events


【解决方案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 自行执行。让我知道这是否不清楚以及是否有效。

【讨论】:

  • 谢谢,我已尝试使用标签并单击其他元素。您有机会发布工作表格示例吗? Select 元素似乎是最大的问题。
  • 我通过使用 SendKeys 来处理 Select 元素,并遵循以下操作:单击选择框,发送正确数量的 DOWN 或 UP 键,发送 ENTER 或 TAB。那应该行得通。尽管我在 WebDriver 的 .NET 绑定中从未遇到过 Seleniums 'select' 命令的问题。
  • 哇,从select 中跳出的标签简直是宝藏!我的问题实际上是使用 ChromeDriver 而不是 IE 来触发选择更改事件,但你已经为我排序了 :)
  • 很高兴它帮助了@yochannah。你有没有尝试我上面的建议@RSG?
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 2015-02-14
    • 1970-01-01
    相关资源
    最近更新 更多