【问题标题】:Clicking on image using RSpec & Capybara使用 RSpec 和 Capybara 单击图像
【发布时间】:2011-12-01 08:24:12
【问题描述】:

我正在使用 Rspec 和 Capybara。

我正在尝试单击图像,但找不到让 Capybara 单击图像的方法。我不知道该怎么做,因为我实际上有相同的类,alt 和 src。

谢谢

html示例

<tr class="even">
  <td class="gridData" style="text-align:center;">
  <td class="gridData"> 221 </td>
  <td class="gridData" route="default" reset="0" urlparams="users index edit {userID}" label="Username">
  <td class="gridData">
  <img class="user-info-grid" alt="info" src="/themes/system/images/icon/16/information.png">
  </td>
</tr>

 <tr class="odd">
  <td class="gridData" style="text-align:center;">
  <td class="gridData"> 222 </td>
  <td class="gridData" route="default" reset="0" urlparams="users index edit {userID}" label="Username">
  <td class="gridData">
  <img class="user-info-grid" alt="info" src="/themes/system/images/icon/16/information.png">

其实这里是源码,我想测试一下:

  <img class="user-info-grid" alt="info" src="/themes/system/images/icon/16/information.png">

但正如我所说,我找不到让 Capybara 点击图片的方法。

有什么想法吗?

【问题讨论】:

  • 另外,您的 HTML 格式不正确。表格行中没有图像这样的东西。该代码将使所有浏览器以怪癖模式呈现。您应该熟悉 HTML 的基础知识。
  • 是打开js弹窗的图片
  • 酷,但这并不能改变标准不允许在tr(表格行)中有img 的事实:-)

标签: ruby-on-rails ruby testing rspec capybara


【解决方案1】:

你可以用这个:

page.first(".user-info-grid").click

这用于查找user-info-grid类并应用点击功能。

如果多个类都带有这个名称,那么点击将在第一个找到的类中执行。

【讨论】:

    【解决方案2】:

    您可以在查找 id 时使用它:

    find("#the_id").click
    

    或者对于一个班级

    find(".the_class").click
    

    【讨论】:

    • 这对我有用。干净简单。谢谢! 更正 当 OP 正在寻找 class 解决方案时,我在寻找 id 解决方案时找到了这个。看起来suresh.g的答案与OP更接近。两者都赞成。
    • 您应该也可以通过将“#”替换为“.”来搜索类。例如:find(".the_class").click
    【解决方案3】:

    我把它放进去并且工作:

      find("img[src*='myphoto.jpg']").click
    

    【讨论】:

      【解决方案4】:

      那是因为您的图片是图片,而不是链接。先将其包裹在一个链接中,然后单击该链接,如下所示:

      <a href="..." id="my_link"><img ... /></a>
      

      【讨论】:

      • 它不起作用。没有链接,你说的对……是基于js的弹窗,我想点击打开
      • 我对 Capybara 知之甚少,但我假设如果您要求它在您的页面上查找链接,它会查找 HTML 锚点。此外,Capybara 中的默认驱动程序完全忽略了页面上任何形式的 JavaScript。看看例如Selenium 驱动程序,能够处理动态页面元素。
      【解决方案5】:

      我是否正确理解没有 &lt;a&gt; 元素,因为您使用的是 JavaScript onclick 处理程序?如果是这样,那么您需要注意普通的 Capybara 不执行 JavaScript。您需要使用capybara-webkit、Selenium 或其他类似的东西。

      但我建议您放入 &lt;a&gt; 元素,然后将 JS 处理程序应用于该元素。这将使没有 JavaScript 的用户代理更容易处理(是的,仍然有一些!)。

      Matthias 是对的:让您的 HTML 有效。

      【讨论】:

        【解决方案6】:

        尝试使用 XPath,如果不是,那么您可以使用 visit_to 链接源,或者您可以使用 http://railscasts.com/episodes/257-request-specs-and-capybara 上的尝试帮助

        【讨论】:

        • 谢谢,但这不是一个链接,它是一个 onclick JS 处理程序
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-16
        • 1970-01-01
        • 2015-10-07
        • 1970-01-01
        • 2018-10-28
        相关资源
        最近更新 更多