用硒填充和操作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 看起来像:
Jq网格搜索小部件
当我基于 Java 的 Selenium WebDriver 脚本将搜索列更改为"名称"(这不是一个不合理的任务......)时,搜索文本字段会失去焦点 - 它在附加图像中以红色圈出。 但是,执行简单的element.sendkeys("搜索")文本确实可以填充文本字段。
问题是,当自动化单击"查找"按钮时,文本字段中的数据不会发送到支持它的 REST API(例如过滤器 : {"列":"名称", "运算符":"cn", "数据":"} )
收到响应后,网格将显示相同的信息。 我相信问题是element.sendKeys()方法似乎没有生成"更改"事件。
我已经尝试了以下方法来生成 DOM 更改事件:
- 单击"搜索"小部件中的某些元素。
- 按 Tab 键转到下一个字段 - element.sendKeys(Keys.Tab)
- 尝试使用 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);
- 无济于事
- 尝试也通过Javascript/Jquery触发"更改"事件,但无济于事例如 $(searchtxt).trigger('change')
我的想法快用完了。 谁能帮忙?
谢谢马克
我自己没有使用硒,但我想给你一个提示。搜索对话框在内部将过滤器作为字符串保存,并在每次change
句柄内更新它。如果用户以交互方式填充数据,然后单击"搜索"按钮,则应自动发送change
事件。我开发了jqGrid的免费jqGrid分支,我包括代码行,我再次触发change
所有输入元素($(".input-elm")
元素上的事件)。
因此,我希望这个问题不应该存在于自由的jqGrid中。如果你必须使用Guriddo jqGrid JS,那么我建议你包括显式调用
$(".input-elm").change();
在Selenium模拟之前,单击"搜索"按钮。
- 当触发下拉列表的onchange事件时,使用JavaScript提交表单
- 在表单中的输入字段上提交事件
- 如何在表单提交事件后运行JavaScript*
- 在动态加载的PHP表单上放置JavaScript事件
- 选择使用 jQuery 接收 change() 事件的表单的提交按钮
- 无法在第一次单击事件时提交表单
- Jquery处理提交按钮's单击事件而不中断表单发布
- 在表单提交按钮的点击事件中调用函数时发生引用错误
- 表单元素上的jQuery focusout事件即使在单击子元素时也会被触发
- JavaScript onChange 事件侦听器对输入表单不起作用
- 动态添加/复制表单时绑定到表单提交事件
- 如何获取 Redux-Form 的提交事件中的表单值
- 如何在 OnKeyPress 事件后获取输入表单元素的值
- 显示带有表单提交的单击事件的 toastR
- 如何在表单提交时在谷歌分析上设置事件跟踪
- 多表单计算器事件处理程序
- onClick 事件在表单标记中不起作用
- 使用Bookmarklet在Firefox中为asp表单加载启动onclick事件
- 如何检查表单提交时鼠标滚动点击完成的点击事件
- 使用jquery提交点击事件表单