首页 > 解决方案 > Capybara - have_css 在不应该匹配空字符串时匹配

问题描述

水豚的新人。测试以下代码。值可以是动态的,包括“”(空)。

within("#foo") do
  expect(page).to have_css("td:nth-child(2)", text: value)
end

问题是:当 value = "" 时,即使 td:nth-child(2) 中有文本,它也匹配为 true。可能的原因:内容是异步渲染的,当 Capybara 第一次检查时,文本还没有出现(即“”),所以这是真的。

只有当文本最后确实为空时才匹配true,而当它不为空时才匹配false?

标签: rubyseleniumtestingrspeccapybara

解决方案


默认情况下,Capybarastext参数会匹配子字符串,因此“”将匹配任何文本内容(因为“”是所有内容的子字符串)。如果您想要完全匹配,那么您需要执行以下任一操作

expect(page).to have_css("td:nth-child(2)", text: value, exact_text: true)

或更简洁地说

expect(page).to have_css("td:nth-child(2)", exact_text: value)

推荐阅读