【问题标题】:Capybara Selector for a link用于链接的 Capybara 选择器
【发布时间】:2015-11-26 16:17:36
【问题描述】:

我有以下代码 HTML,我不确定是否可以在水豚中为“查找”构建一个选择器来获取我需要的元素。我在 Rails 项目中使用水豚做黄瓜。 (生成 HTML)

<tbody>
  <tr>
    <td>Heine</td>
    <td><a href="/customers/1">Show</a></td>
    <td><a href="/customers/1/edit">Edit</a></td>
    <td><a data-confirm="Are you sure?" rel="nofollow" data-method="delete" href="/customers/1">Destroy</a></td>
  </tr>
  <tr>
    <td>IKEA</td>
    <td><a href="/customers/2">Show</a></td>
    <td><a href="/customers/2/edit">Edit</a></td>
    <td><a data-confirm="Are you sure?" rel="nofollow" data-method="delete" href="/customers/2">Destroy</a></td>
  </tr>
  <tr>
    <td>testcustomer</td>
    <td><a href="/customers/5">Show</a></td>
    <td><a href="/customers/5/edit">Edit</a></td>
    <td><a data-confirm="Are you sure?" rel="nofollow" data-method="delete" href="/customers/5">Destroy</a></td>
  </tr>

如何“找到”第一个 td 包含“testcutomer”的行的 href“编辑”? 谢谢。

【问题讨论】:

    标签: ruby-on-rails find cucumber capybara selector


    【解决方案1】:

    您可以使用以下内容:

    find("td", :text => /\Atestcustomer\z/).first(:xpath,"..").find("a", :text => /\AEdit\z/)
    

    find("td", :text =&gt; /\Atestcustomer\z/) 为您提供带有文本“testcustomer”的td,然后您使用first(:xpath,"..") 找到该td 的父级,然后您使用find("a", :text =&gt; /\AEdit\z/) 找到带有文本“编辑”的锚标记。

    【讨论】:

      【解决方案2】:

      如果您使用的是 racktest 驱动程序,这可以很清楚地利用 nokogiri css 选择器可以使用同级选择器启动这一事实,并且它将在元素 find 被调用的范围内进行解释.

      find(:css, 'td', text: 'testcustomer').find(:css, '~ td > a', text: 'Edit')
      

      如果使用任何可能不允许的“真实浏览器”驱动程序,因为 querySelector 的规范不允许这样做。在这种情况下,使用 xpath 最容易做到这一点(请注意,这也适用于 racktest,因此是交叉驱动程序兼容性的首选解决方案)和以下兄弟轴

      find(:xpath, ".//td[text()='testcustomer']/following-sibling::td/a[text()='Edit']")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-07
        • 2010-10-16
        • 2016-07-24
        • 2018-06-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多