如何使用capybara在特定的html元素中检查CSS类名称?

时间:2019-01-11 00:30:32

标签: ruby-on-rails capybara

我想测试单击单元格时,特定的tr元素是否添加了一个selected css类。我想通过文本识别特定行,然后单击该行中的一个单元格,然后检查其CSS类。

在整个页面中检查此CSS的这段代码似乎有效:

row = find(:xpath, "//tr[contains(., 'My Text')]")
cell = find(:xpath, "//tr[contains(., 'My Text')]/td")
expect(page).to_not have_css("tr.selected") # success
cell.click
expect(page).to have_css("tr.selected") # success

...但是我想将搜索范围限制为特定的行对象。这段代码永远找不到我要寻找的CSS,并且总是使最后一个expect失败。

row = find(:xpath, "//tr[contains(., 'My Text')]")
cell = find(:xpath, "//tr[contains(., 'My Text')]/td")
expect(row).to_not have_css("tr.selected")
cell.click
expect(row).to have_css("tr.selected") # fails

当我在row[:class]之后查看click时,在其类列表中看到“已选择”。如何正确限制测试以仅在特定行中寻找.selected类?

1 个答案:

答案 0 :(得分:1)

have_css检查后代,检查您想要的当前元素match_css

row = find(:xpath, "//tr[contains(., 'My Text')]")
cell = row.find('td')
expect(row).to_not match_css("tr.selected")
cell.click
expect(row).to match_css("tr.selected")

此外,如果您不需要使用XPath

row = find('tr:not(.selected)', text: 'My Text')
row.find('td').click
expect(row).to match_css('tr.selected')

阅读更好