【问题标题】:Capybara; clicking on some element that is very similar to other one水豚;单击与其他元素非常相似的某个元素
【发布时间】:2014-06-24 10:57:32
【问题描述】:

在我的 CSS 中

<ul class="test1">
  <li class="items">
    <a class="sample">
      <div class="itembox">
        <div class="item_name">
          <p>
            Item_name_1
          </p>
        </div>
      </div>
    </a>
  </li>
  <li class="items">
    <a class="sample">
      <div class="itembox">
        <div class="item_name">
          <p>
            Item_name_2
          </p>
        </div>
      </div>
    </a>
  </li>
  <li class="items"></li>
  <li class="items"></li>
</ul>

如你所见,我所有的 li(s) 都有相同的班级,他们的孩子也有。 我想知道如何在我的 li 中单击全部。 如果我执行 page.find("ul[class='test'] > li[class='items'] > a[class='sample']).click,它会找到 4 个元素。

那么,我怎样才能通过使用他们在“ul > li > a > div > div > p”中的文本来点击“ul > li > a”来具体哪个?

类似,点击“ul > li > a”,其中“ul > li > a > div > div > p”, :text => “Item_name_1”

【问题讨论】:

  • 在可能的情况下避免使用 HTML 选择器链的好主意,您将陷入与 css 作者经常落入的 DOM 结构紧密联系的同一个陷阱

标签: ruby-on-rails rspec selenium-webdriver cucumber capybara


【解决方案1】:

假设链接文本是唯一的,您可以简单地使用click_link 方法。此方法允许您根据其文本单击链接。请注意,它的文本被认为是其中所有文本节点的连接 - 即您有链接文本“Item_name_1”和“Item_name_2”。

# Click the first link
click_link('Item_name_1')

# Click the second link
click_link('Item_name_2')

或者,如果您需要更多控制(例如需要指定链接的类),您可以使用带有:text 选项的find 方法。例如,您可以使用 CSS 定位器定位链接,然后使用 :text 选项来区分它们:

# Click the first link
find('a.sample', :text => 'Item_name_1').click

# Click the second link
find('a.sample', :text => 'Item_name_2').click

【讨论】:

    【解决方案2】:

    试试这个:

    //li[.//p[text()='Item_name_1']]

    【讨论】:

      猜你喜欢
      • 2018-10-20
      • 2019-02-20
      • 2013-09-24
      • 1970-01-01
      • 1970-01-01
      • 2013-09-14
      • 2017-03-16
      • 2023-03-30
      • 1970-01-01
      相关资源
      最近更新 更多