我已经为这个问题苦苦挣扎了一个多星期了。我们的应用程序使用 jqGrid。我正在尝试进行搜索(在 Selenium WebDriver 2.35 中 - 由于各种原因它必须是该版本)。
jqGrid 看起来像:
当我的基于 Java 的 Selenium WebDriver 脚本将搜索列更改为“名称”(不是一个不合理的任务...)时,搜索文本字段会失去焦点 - 它在附图中用红色圈出。但是,执行简单的 element.sendkeys("search") 文本确实可以填充文本字段。
问题在于,当自动化单击“查找”按钮时,文本字段中的数据不会发送到支持它的 REST API(例如,filter : {"column":"name", "operator": "cn", "数据":""} )
收到响应后,网格会显示相同的信息。我认为问题在于 element.sendKeys() 方法似乎没有生成“更改”事件。
我尝试了以下方法来生成 DOM 更改事件:
- 点击搜索小部件中的某个元素。
- 按 Tab 键切换到下一个字段 - element.sendKeys(Keys.Tab)
- 尝试使用 Javascript/JQuery 在文本框中设置焦点
JavascriptExecutor jse = (JavascriptExecutor) 驱动程序;
String script = "var searchtxt=document.evaluate('"+xpathQuery+"', document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue; "+
"$(searchtxt).focus()";
jse.executeScript(脚本);
- 无济于事
- 尝试通过 Javascript/Jquery 触发“更改”事件,但无济于事 例如$(searchtxt).trigger('更改')
我的想法已经用完了。有人可以帮忙吗?
谢谢, 标记
最佳答案
我自己没有使用 Selenium,但我想给你一个提示。搜索对话框将过滤器内部保存为字符串,并在每次 change
句柄内更新它。如果用户以交互方式填写数据,然后单击“搜索”按钮,则应自动发送 change
事件。我开发free jqGrid jqGrid 和 I 的分支包括 the lines我在所有输入元素(在 $(".input-elm")
元素上)再次触发 change
事件的代码。
因此我希望免费的 jqGrid 中不应该存在这个问题。如果您必须使用 Guriddo jqGrid JS 那么我建议您包含显式调用
$(".input-elm").change();
在 Selenium 之前将模拟单击“搜索”按钮。
关于javascript - 使用 selenium 填充和操作 jqGrid 的搜索小部件似乎不会触发 DOM 表单事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35906719/