【问题标题】:Get element with jquery and selenium IDE 1.0.8使用 jquery 和 selenium IDE 1.0.8 获取元素
【发布时间】:2011-07-12 16:46:10
【问题描述】:

我正在尝试使用 jquery 和 Selenium IDe 1.0.8 获取元素。

<td>storeValue</td>
<td>$('#result').find('img').filter('[alt=&quot;NameOfPhoto&quot;]').eq(0)</td>
<td></td>

在日志中我得到

[error] Element $('#result').find('img').filter('[alt="NameOfPhoto"]').eq(0) not found 

当我把这个命令放在萤火虫中时,我得到了这个元素:/

为什么它不起作用?

编辑: 或者,例如,您可以给我代码如何在 stackoverflow 的主页上使用 JAVA 标记获取第一个对象的 id。

标签:

<a rel="tag" title="show questions tagged 'java'" class="post-tag" href="/questions/tagged/java">java</a>

示例结果来自:

<div id="question-summary-4303985" class="question-summary narrow">

是:

question-summary-4303985

【问题讨论】:

    标签: jquery selenium selenium-ide


    【解决方案1】:

    根据其他帖子,我尝试了以下方法并且成功了。

    将以下代码添加到 user-extensions.js:

    function jQuery (selector)
    {
        return selenium.browserbot.getUserWindow().jQuery(selector);
    }
    

    然后您可以使用关键字 jQuery 而不是 $ 来访问任何 jQuery 函数。只需确保您正在测试的页面引用的是 jQuery js 文件。

    【讨论】:

    • 太棒了!这对我有用!我正在尝试这个答案中的建议stackoverflow.com/questions/2814007/… 得到一个错误,即 jQuery 不是一个函数,然后像你说的那样添加了上面的脚本。工作!谢谢!
    【解决方案2】:

    要在 Selenium IDE 中使用 jQuery,它的位置如下。 (请确保您的页面中已加载 jQuery)

    this.page().getCurrentWindow().wrappedJSObject.jQuery()
    

    您可以将函数位置存储在 Selenium 变量中。

    <tr>
        <td>store</td>
        <td>this.page().getCurrentWindow().wrappedJSObject.jQuery</td>
        <td>jq</td>
    </tr>
    

    然后您可以在您的测试中使用它们,例如:

    <tr>
        <td>assertEval</td>
        <td>${jq}('div').attr('foo')</td>
        <td>bar</td>
    </tr>
    

    以上使用 jQuery 匹配 &lt;div foo='bar' /&gt;


    编辑:或者您可以通过以下方式访问它:

    this.browserbot.getUserWindow().jQuery
    selenium.browserbot.getUserWindow().jQuery
    

    备用来源:http://cssgreut.wordpress.com/2010/12/20/run-selenium-ide-tests-with-jquery-selectors/

    【讨论】:

    • +1 用于实际显示源代码!这似乎超出了大多数帮助 Selenium 的人的能力。
    【解决方案3】:

    尝试使用jQuery 而不是$()。美元符号在 selenium 中有不同的含义。

    编辑

    据我所知,您不能使用 jQuery 来选择元素。谷歌搜索一无所获。只需使用 Xpath。

    【讨论】:

      【解决方案4】:

      您是否在 Selenium jar 中捆绑了 jQuery?如果没有,则不能使用该语法。

      【讨论】:

      • 如果您使用 Selenium RC,请查看 Jian 博客文章 johnjianfang.blogspot.com/2009/04/…。对于 IDE,您可以将 jquery 添加为用户扩展。请参阅 selenium 文档。
      【解决方案5】:

      使用 JavaScript 存储当前日期并使用 ${} 将其回显到 Selenium 日志控制台的示例:

      <tr>
          <td>store</td>
          <td>javascript{new Date}</td>
          <td>foo</td>
      </tr>
      <tr>
          <td>echo</td>
          <td>${foo}</td>
          <td></td>
      </tr>
      

      如您所见,将 store 与 JavaScript 表达式的结果一起使用,在表达式周围添加 javascript{}

      您的示例使用javascript{storedVars['bar']} 输出存储的变量。

      <tr>
          <td>store</td>
          <td>javascrip{jQuery('#result').find('img').filter('[alt="NameOfPhoto"]').eq(0)}</td>
          <td>bar</td>
      </tr>
      <tr>
          <td>open</td>
          <td>javascript{storedVars['bar']}</td>
          <td></td>
      </tr>
      

      Selenium 中的 JavaScript:

      使用javascript{alert('hello')},您可以在值字段中运行 JavaScript/jQuery。

      Selenium 还有一个扩展来显示存储了哪些变量:http://reallysimplethings.wordpress.com/2010/09/28/the-stored-variables-viewer-plugin-for-selenium-ide-v1-3-released/

      【讨论】:

      • 它不起作用:/ 我得到:错误 [错误] 意外异常:消息 -> jQuery 不是函数,文件名 -> chrome://selenium-ide/content/selenium/scripts /selenium-api.js, lineNumber -> 2490, stack -> ("javascript{jQuery('#result').find('img').filter('[alt=\"NameOfPhoto\"]').eq (0)}")
      • 查看官方文档了解如何存储变量。
      • 我认为 user278618 是对的,我也无法以这种方式访问​​ jQuery,我不确定它是否与存储变量有关,如果我错了,请纠正我。跨度>
      • 所以不要使用jQuery,你可以选择任何其他正常的选择器将值放入“bar”
      • 关于 Selenium“存储变量”插件的好提示...没有意识到 Selenium 还有很多其他有用的插件。谢谢。 :)
      【解决方案6】:

      试试这个来自German Rumm's blog的说明

      首先,下载Sizzle,这是一个jQuery的选择器引擎,并将sizzle.js解压到一个方便的位置。
      其次,创建空的 user-extensions.js 文件。顺便说一下,名字可以是任何你想要的。
      将此添加到 user-extensions.js

      PageBot.prototype.locateElementBySizzle = function(locator, inDocument) {
        var results = [];
        window.Sizzle(locator, inDocument, results);
        return results.length > 0 ? results[0] : null;
      }
      

      第三,转到 Selenium IDE,Options -> Options... 并将 sizzle.js 和 user-extensions.js 添加到“Selenium Core extensions”。
      重新启动 Selenium IDE(只需关闭它的所有实例并再次打开它),现在您可以在任何需要“定位器”的地方使用 sizzle=(locator)

      您的选择器将如下所示:

      #result img[alt="NameOfPhoto"]:eq(0)

      JQuery 选择器大多来自 CSS 选择器,所以你也可以在 selenium 中使用它们

      css=cssSelector

      【讨论】:

        猜你喜欢
        • 2014-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-19
        • 2021-06-06
        • 2022-01-18
        • 2021-09-29
        • 1970-01-01
        相关资源
        最近更新 更多