使用水豚+硒验证特定CSS值的文本

时间:2018-12-24 08:02:59

标签: ruby selenium rspec capybara

我要验证特定CSS值的文本。

HTML如-

    <table class="resp_card_table company-dashboard">
     <thead>...</thead>
     <tbody>
      <tr ng-repeat="company in company | filter:searchString" class="ng-scope">
       <td data-label="Company Name" class="ng-binding">ABC Constructions</td>
      </tr>
     </tbody>
    </table>

我要验证“公司名称”的文字为“ ABC Constructions”

如何使用Expect语句做到这一点?

2 个答案:

答案 0 :(得分:3)

从水豚仓库中:https://github.com/teamcapybara/capybara#using-capybara-with-rspec

  

...视图规格还支持水豚匹配器:

RSpec.describe "todos/show.html.erb", type: :view do
  it "displays the todo title" do
    assign :todo, Todo.new(title: "Buy milk")
    render

    expect(rendered).to have_css("header h1", text: "Buy milk")
  end
end

给出您的HTML,请尝试以下操作:

expect(rendered).to have_css(
  'td[data-role="Company Name"]', text: 'ABC Constructions'
)

答案 1 :(得分:2)

如果您尝试在视图规格中执行此操作,那么aridlehoover的答案将是正确的。但是,在功能/系统规格中(通常您将硒与水豚一起使用),那么它将是

expect(page).to have_css('td[data-role="Company Name"]', text: 'ABC Constructions')

请注意,文本选项(默认情况下)将匹配子字符串(包含而不是等于),因此它也将与文本内容为“ ABC Constructions Company”的元素匹配。如果您想完全匹配“ ABC建筑”,则可以

expect(page).to have_css('td[data-role="Company Name"]', text: 'ABC Constructions', exact_text: true)

或更简洁

expect(page).to have_css('td[data-role="Company Name"]', exact_text: 'ABC Constructions')