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

标签 javascript jquery selenium dom jqgrid

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

jqGrid 看起来像:

JqGrid Search widget

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

问题在于,当自动化单击“查找”按钮时,文本字段中的数据不会发送到支持它的 REST API(例如,filter : {"column":"name", "operator": "cn", "数据":""} )

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

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

  1. 点击搜索小部件中的某个元素。
  2. 按 Tab 键切换到下一个字段 - element.sendKeys(Keys.Tab)
  3. 尝试使用 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/

    相关文章:

    python - 检查元素是否存在selenium python

    javascript - 双击事件不触发

    javascript - Typeahead.js 不显示下拉菜单

    javascript - 如何阅读和理解 ExtJS 源代码?

    javascript - 使用 Jquery 和 JqPlot 绘制带有数据的 JSON 文件中的图形

    python - xPath:将表达式与实际源代码匹配困难

    javascript - 如何检查用户不能在html网页中输入多于一位小数或点

    javascript - JSONP- "Uncaught SyntaxError: Unexpected token"

    javascript - iCheck on() 方法回调不起作用

    python - Selenium safari 驱动程序无法在 python 中工作