如何使用水豚检查特定 html 元素中的 css class 名称?

How to check for a css class name in a specific html element with capybara?

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

在整个页面中检查此 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

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

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')

读起来好多了