使用 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 看起来像:
当我的基于 Java 的 Selenium WebDriver 脚本将搜索列更改为 'Name'(不是一项不合理的任务...)时,搜索文本字段失去焦点 - 它在附加图像。但是,做一个简单的 element.sendkeys("search") 文本确实可以填充文本字段。
问题是,当自动化点击 'Find' 按钮时,文本字段中的数据不会发送到支持它的 REST API(例如过滤器:{"column":"name", "operator":"cn", "data":""} )
收到响应后,网格显示相同的信息。我认为问题在于 element.sendKeys() 方法似乎没有生成 'change' 事件。
我尝试了以下方法来生成 DOM 更改事件:
- 点击搜索小部件中的某个元素。
- 切换到下一个字段 - 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 触发 '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" 按钮之前。
我已经为这个问题苦苦挣扎了一个多星期。我们的应用程序使用 jqGrid。我正在尝试进行搜索(在 Selenium WebDriver 2.35 中 - 由于各种原因必须是该版本)。
jqGrid 看起来像:
当我的基于 Java 的 Selenium WebDriver 脚本将搜索列更改为 'Name'(不是一项不合理的任务...)时,搜索文本字段失去焦点 - 它在附加图像。但是,做一个简单的 element.sendkeys("search") 文本确实可以填充文本字段。
问题是,当自动化点击 'Find' 按钮时,文本字段中的数据不会发送到支持它的 REST API(例如过滤器:{"column":"name", "operator":"cn", "data":""} )
收到响应后,网格显示相同的信息。我认为问题在于 element.sendKeys() 方法似乎没有生成 'change' 事件。
我尝试了以下方法来生成 DOM 更改事件:
- 点击搜索小部件中的某个元素。
- 切换到下一个字段 - 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 触发 '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" 按钮之前。