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

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

本文关键字:事件 表单 DOM 填充 操作 jqGrid 小部 搜索      更新时间:2023-09-26

我现在正在与这个问题搏斗一个多星期。 我们的应用程序使用 jqGrid。 我正在尝试进行搜索(在Selenium WebDriver 2.35中 - 由于各种原因,它必须是那个版本)。

jqGrid 看起来像:

Jq网格搜索小部件

当我基于 Java 的 Selenium WebDriver 脚本将搜索列更改为"名称"(这不是一个不合理的任务......)时,搜索文本字段会失去焦点 - 它在附加图像中以红色圈出。 但是,执行简单的element.sendkeys("搜索")文本确实可以填充文本字段。

问题是,当自动化单击"查找"按钮时,文本字段中的数据不会发送到支持它的 REST API(例如过滤器 : {"列":"名称", "运算符":"cn", "数据":"} )

收到响应后,网格将显示相同的信息。 我相信问题是element.sendKeys()方法似乎没有生成"更改"事件。

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

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

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触发"更改"事件,但无济于事例如 $(searchtxt).trigger('change')

我的想法快用完了。 谁能帮忙?

谢谢马克

我自己没有使用硒,但我想给你一个提示。搜索对话框在内部将过滤器作为字符串保存,并在每次change句柄内更新它。如果用户以交互方式填充数据,然后单击"搜索"按钮,则应自动发送change事件。我开发了jqGrid的免费jqGrid分支,我包括代码行,我再次触发change所有输入元素($(".input-elm")元素上的事件)。

因此,我希望这个问题不应该存在于自由的jqGrid中。如果你必须使用Guriddo jqGrid JS,那么我建议你包括显式调用

$(".input-elm").change();

在Selenium模拟之前,单击"搜索"按钮。