水豚:click_button 没有文本或 ID?

Capybara: click_button with no text or id?

这里是 html 代码:

<button type="button" class="icl-Button--transparent icl-Button--sm ia-AddCoverLetter-button"><span class="icl-ButtonIcon"><svg aria-label="Add cover letter" class="icl-Icon icl-Icon--blue icl-Icon--sm" role="img"><g><path d="M9.75,5.25H8.25v3h-3v1.5h3v3h1.5v-3h3V8.25h-3v-3ZM9,1.5A7.5,7.5,0,1,0,16.5,9,7.5,7.5,0,0,0,9,1.5ZM9,15a6,6,0,1,1,6-6A6,6,0,0,1,9,15Z"></path></g></svg></span>Add cover letter</button>

当水豚没有名称或 ID 时,如何让水豚点击它。我尝试了 click_link('Add cover letter') 但它也没有用。

你应该可以 select 它是 class,你试过了吗?

find('button.ia-AddCoverLetter-button').click

接受的答案可以正常工作,但是如果您想继续使用 click_button 以使您的代码更清晰易读(click_button 而不是 click_link,因为它是一个按钮而不是 link) 你也可以做

click_button(class: 'ia-AddCoverLetter-button')

或者如果你想指定多个 class 你可以传递一个数组

click_button(class: ['icl-Button--transparent', 'icl-Button--sm', 'ia-AddCoverLetter-button'])

我在寻找一种方法来点击一个基于它的项目时遇到了这个问题aria-label(因为 OP 尝试这样做但无法开始工作)。

一般来说,现在(自 August 2016 起)可以通过启用水豚匹配 ARIA 标签的选项来完成。在 Rails 系统测试中,这是通过将 Capybara.enable_aria_label = true 添加到 application_system_test_case.rb:

来实现的
# test/application_system_test_case.rb
require 'test_helper'

class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  driven_by :selenium, using: :chrome, screen_size: [1400, 1400]
  Capybara.enable_aria_label = true
end

启用该选项后,单击图标 link 像这样(使用 HAML):

= link_to edit_reader_path(reader), 'aria-label' => 'Edit' do
  %i.icon-pencil.m-auto.text-primary{'aria-hidden' => 'true'}

...我可以在我的系统测试中写这样的东西:

click_on 'Edit', match: :first

我假设这需要进行调整以适应 OP 的情况,其中 aria-label 位于嵌套在跨度内的 SVG 上,在按钮内,可能是通过查找 SVG 然后找到其父级的parent.