Ruby on rails 水豚选择器匹配但不匹配所有过滤器,这意味着什么?

Ruby on rails 水豚选择器匹配但不匹配所有过滤器,这意味着什么?,ruby-on-rails,selenium,css-selectors,cucumber,capybara,Ruby On Rails,Selenium,Css Selectors,Cucumber,Capybara,在运行capybara选择器之前,我使用save_和open_page命令保存了以下html(我还检查了page.body,它是相同的): 我收到以下错误消息:“预计会找到xpath”//div[@class='box']”9次,找到6个匹配项:“box_2001 attrkulcs1:attrkulcs2:attrkulcs2 attrkulcs3:attrvalue 2 attrkulcs3:attrvalue 3”、“box_2002 attrkulcs1:attrvalue 1 attr

在运行capybara选择器之前,我使用save_和open_page命令保存了以下html(我还检查了page.body,它是相同的):

我收到以下错误消息:“预计会找到xpath”//div[@class='box']”9次,找到6个匹配项:“box_2001 attrkulcs1:attrkulcs2:attrkulcs2 attrkulcs3:attrvalue 2 attrkulcs3:attrvalue 3”、“box_2002 attrkulcs1:attrvalue 1 attrkulcs2:attrkulcs3 attrkulcs4:attrvalue 4”、“box_2003”、“box_1001”,“box_1002 attrkulcs1:attrkulcs2:attrvalue 2 attrkulcs3:attrvalue 3”、“box_1003 attrkulcs1:attrvalue 1”。还找到了”“和”“,它们与选择器匹配,但不是所有筛选器。(Capybara::ExpectationNotMet)”

请注意,找到的6个匹配项并不是每次测试都是6。它是一个介于4和9之间的数字。 我真的不明白什么是“匹配选择器但不是所有筛选器”语句。我知道我没有使用任何筛选器

我尝试了以下选择器,但它们都给出了相同的错误消息:

have_xpath("//div[@class='box']", :count => 9)
have_selector(:css, '.box', :count => 9)
have_css('.box', :count => 9)
我也用过capybara 2.2.1和2.3.0。我用的是Selenium webdriver 2.42.0


运行$x(“//div[@class='box']”)。从浏览器控制台运行的长度非常理想。

“匹配选择器,但不是所有筛选器”表示:

  • 匹配选择器:一个“div”
  • 与筛选器不匹配:@class='box'
因此,您似乎总是有9个div,但其中有一些未被预期的.box类识别

如果手动查看原始html(所有9个div是否都附加了正确的.box类),会发生什么情况

更新:

我对选择器和过滤器的假设可能不正确。整个块
“//div[@class='box']”
就是选择器,可选的过滤器是
文本:“foo'

此外,我将您的html粘贴到一个项目中,并将其捆绑更新到capybara(2.2.1),您的所有测试都通过了:

```

```


因此,我无法重现问题…

我正在从github()复制twalpole的答案:

“如果没有相关的css,您实际上正在使用过滤器计数和可见(默认值为true)这是不可能确定的,但是这三组空引号往往表示.box元素中的3个在页面上实际上不可见”


事实上,这就是问题所在,我不得不在选择器中添加一个“visible:false”参数来搜索屏幕上看不到的元素。

你可以在我的问题中的链接上看到html。它有9个带box类的div(它是在选择器运行之前由capybara生成的):
expect(response.body).to have_xpath("//div[@class='box']", :count => 9)
expect(response.body).to have_selector(:css, '.box', :count => 9)
expect(response.body).to have_css('div.box', :count => 9)