使用 selenium 填充和操作 jqGrid 的搜索小部件似乎不会触发 DOM 表单事件

Populating and manipulating jqGrid's search widget with selenium doesn't seem to trigger DOM form events

我已经为这个问题苦苦挣扎了一个多星期。我们的应用程序使用 jqGrid。我正在尝试进行搜索(在 Selenium WebDriver 2.35 中 - 由于各种原因必须是该版本)。

jqGrid 看起来像:

JqGrid Search widget

当我的基于 Java 的 Selenium WebDriver 脚本将搜索列更改为 'Name'(不是一项不合理的任务...)时,搜索文本字段失去焦点 - 它在附加图像。但是,做一个简单的 element.sendkeys("search") 文本确实可以填充文本字段。

问题是,当自动化点击 'Find' 按钮时,文本字段中的数据不会发送到支持它的 REST API(例如过滤器:{"column":"name", "operator":"cn", "data":""} )

收到响应后,网格显示相同的信息。我认为问题在于 element.sendKeys() 方法似乎没有生成 'change' 事件。

我尝试了以下方法来生成 DOM 更改事件:

  1. 点击搜索小部件中的某个元素。
  2. 切换到下一个字段 - element.sendKeys(Keys.Tab)
  3. 尝试使用 Javascript/JQuery
  4. 在文本框中设置焦点

JavascriptExecutor jse = (JavascriptExecutor) driver; String script = "var searchtxt=document.evaluate('"+xpathQuery+"', document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue; "+ "$(searchtxt).focus()"; jse.executeScript(script); - 无济于事

  1. 也尝试通过 Javascript/Jquery 触发 'change' 事件但无济于事 例如$(searchtxt).触发器('change')

我 运行 没主意了。谁能帮忙?

谢谢, 马克

我自己不使用 Selenium,但我想给你一个提示。搜索对话框在内部将过滤器作为字符串保存,并在 change 句柄内每次更新它。如果用户以交互方式填写数据,然后单击 "Search" 按钮,则应自动发送 change 事件。我开发了 free jqGrid fork of jqGrid and I includes the lines 代码,我在所有输入元素上再次触发 change 事件(在 $(".input-elm") 元素上)。

所以我希望这个问题不应该存在于免费的jqGrid中。如果您必须使用 Guriddo jqGrid JS,那么我建议您包括

的显式调用
$(".input-elm").change();

在 Selenium 模拟点击 "Search" 按钮之前。