Capybara / RSpec确保somethinng在页面上的任何地方都不存在

问题描述

我想了解如何确保页面上不存在某些内容,特别是具有已知值的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 pizzamy pizza 2,并且您只想确定确实没有my pizza 3,则可以使用{{1 }}选项

my pizza

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...