问题描述
我想了解如何确保页面上不存在某些内容,特别是具有已知值的div。本质上,我要删除一个元素,并且要测试页面上任何地方都不存在具有3个类的元素,也有多个具有相同类的元素,因此重要的部分是确保div标签的内部不存在。
例如:
<div class="blah blah2 blah3">my pizza</div>
可能有20多个div具有相同的类blah blah2和blah3,但是,我需要确保其中没有一个包含“我的披萨”一词,该如何使用Expect()做到这一点?
我尝试了类似的方法,但是没有用:
expect(all(:css,'div.blah blah2 blah3').value).not_to eq('value'))
有什么想法吗?提示?
更新: 我尝试添加assert_no_text('my pizza'),但这会检查整个页面,我不知道在将来的软件版本中是否会改变。
解决方法
我认为这样应该可以帮助您
expect(page).not_to have_css('div.blah blah2 blah3',text: 'value')
,
你可以做
expect(page).to have_no_css('div.blah.blah2.blah3',text: 'my pizza')
或
expect(page).not_to have_css('div.blah.blah2.blah3',text: 'my pizza')
假设您正确包含了Capybaras RSpec匹配器,那么每个匹配器将做完全相同的事情,最多等待Capybara.default_max_wait_time
,页面上的所有匹配元素都将消失。如果您不喜欢编写CSS类选择器(请注意,每个类在CSS选择器中同一元素上的每个类之前都需要.
-您使用空格分隔的示例将查找嵌套元素),也可以使用{ {1}}选项
class
此外,如果您的元素可能具有expect(page).not_to have_css('div',class: %w[blah blah2 blah3],text: 'my pizza')
,my pizza
和my pizza 2
,并且您只想确定确实没有my pizza 3
,则可以使用{{1 }}选项
my pizza