如何向Selenium Remote Control添加JQuery定位器

dan*_*ain 7 jquery selenium css-selectors

我一直很喜欢使用带有Selenium的XPath,甚至使用带有Javascript的getEval,但是一位同事说能够在Selenium中使用JQuery选择器并不是很好.

我用谷歌搜索了它,但找不到任何似乎对我有用的文章.任何人都可以提供有关如何使用JQuery语法从selenium中提取doc元素及其各自值的全面指南.

我正在使用C#来编写我的selenium测试,所以如果有任何一个例子可以来自C#的观点,那就太棒了.

谢谢

Zug*_*alt 9

Karl Swedberg写了一篇很棒的博客文章,可以在http://www.learningjquery.com/2009/04/better-stronger-safer-jquerify-bookmarklet上找到.

我们对此进行了调整,基本上在Selenium Server jar文件中我们修改了RemoteRunner.html以包含jquery JavaScript(从http://code.jquery.com/jquery-latest.min.js获得):

        <script language="JavaScript" type="text/javascript" src="jquery.min.js"></script>
        <script language="JavaScript" type="text/javascript">
            function openDomViewer() {
                var autFrame = document.getElementById('selenium_myiframe');
                var autFrameDocument = new SeleniumFrame(autFrame).getDocument();
                this.rootDocument = autFrameDocument;
                var domViewer = window.open(getDocumentBase(document) + 'domviewer/domviewer.html');
                return false;
            }
        </script>
Run Code Online (Sandbox Code Playgroud)

然后为了在Selenium中使用它,我们添加了位置策略:

mySelenium.addLocationStrategy("jquery",
            "var loc = locator; " +
            "var attr = null; " +
            "var isattr = false; " +
            "var inx = locator.lastIndexOf('@'); " +

            "if (inx != -1){ " +
            "   loc = locator.substring(0, inx); " +
            "   attr = locator.substring(inx + 1); " +
            "   isattr = true; " +
            "} " +

            "var found = jQuery(inDocument).find(loc); " +
            "if (found.length >= 1) { " +
            "   if (isattr) { " +
            "       return found[0].getAttribute(attr); " +
            "   } else { " +
            "       return found[0]; " +
            "   } " +
            "} else { " +
            "   return null; " +
            "}"
        );
Run Code Online (Sandbox Code Playgroud)

注意上面添加的定位器策略是在Java中,但它只是一个字符串,所以应该很容易在C#中复制.JQuery确实让事情变得更快,尤其是在Internet Explorer中!

要修改jar,您可以使用java命令行工具更新下载的selenium服务器jar.创建一个与名为"core"的jar相同级别的文件夹,并将修改后的RemoteRunner.html和jquery.min.js文件放在那里.然后运行如下:

jar -uf selenium-server-standalone-2.0b3-APT.jar core\RemoteRunner.html
jar -uf selenium-server-standalone-2.0b3-APT.jar core\jquery.min.js
Run Code Online (Sandbox Code Playgroud)

如果jar不在您的路径中,您可以使用完整路径,例如在Windows上,您可以使用以下内容执行它:

"C:\Program Files\Java\jdk1.6.0_22\bin\jar.exe" <arguments>
Run Code Online (Sandbox Code Playgroud)

  • @Andreas你只需使用jquery =来启动你的定位器表达式,然后使用jquery!示例定位器表达式(故意不是最简单的示例):"jquery = table#myParentTableID> input.input-class" (2认同)
  • 嘿,我与此争吵了一段时间才意识到我必须将提到的脚本标签放入RemoteRunner.html而不是TestRunner. (2认同)