在运行capybara选择器之前,我使用save_and_open_page命令保存了以下html (我还检查了page.body,它是相同的):https://gist.github.com/davidkovaccs/8991af5bed1805277f52
我得到了以下错误消息:“期望查找xpath”//div@class=‘box’9次,找到了6次匹配:"box_2001 attrkulcs1: attrvalue 1 attrkulcs2: attrvalue 2 attrkulcs3: attrvalue 3“、"box_2002 attrkulcs1: attrvalue 1 attrkulcs2: attrvalue 2 attrkulcs3: attrvalue 3 attrkulcs4: attrvalue 4”、"box_2003“、"box_1001”、"box_1002 attrkulcs1: attrvalue 1 attrkulcs2: attrvalue 2 attrkulcs3: attrvalue 3“、"box_1003 attrkulcs1: attrvalue 1”。还找到了“”、“”、"",这与选择器匹配,但不是所有的过滤器。(水豚::ExpectationNotMet)
请注意,对于每次测试运行,找到的6个匹配值并不是6。这是一个介于4到9之间的数字。我真的不明白什么是‘匹配选择器,但不是所有过滤器’语句。我知道我没有用任何过滤器。
我尝试过以下选择器,但它们都给出了相同的错误消息:
have_xpath("//div[@class='box']", :count => 9)
have_selector(:css, '.box', :count => 9)
have_css('.box', :count => 9)我也曾尝试过在水豚2.2.1和2.3.0中使用。我正在使用SeleniumWebDriver2.42.0
从浏览器控制台运行$x("//div@class='box'").length运行得很好。
发布于 2014-06-25 13:14:26
我正在抄袭github (https://github.com/jnicklas/capybara/issues/1326)的回答:
如果没有相关的css,您实际上使用的是筛选器计数和可见(默认为true) --这是不可能确定的,但是这三组空引号将倾向于指示页面上没有实际可见的3个.box元素
事实上,这就是问题所在,我不得不在选择器中添加一个“可见的:false”参数,以搜索屏幕上看不到的元素。
发布于 2014-06-10 10:14:35
“匹配选择器,但不是所有过滤器”意味着:
因此,您似乎总是有9个div的,但是其中有几个没有被期望的.box类所识别。
如果您手动查看原始html (所有9个div的.box类都有正确的附加),会发生什么情况?
更新:
在我的选择器和过滤器的假设中,我可能是错误的。整个块"//div[@class='box']"是选择器,可选的过滤器类似于text: 'foo'等等。
另外,我将您的html粘贴到一个项目中,并将更新后的html绑定到capybara(2.2.1),然后您的所有测试都通过了:
```javascriptexpect(response.body).to have_xpath("//div@class='box'",计数=> 9)
expect(response.body).to have_selector(:css,‘..box’,:count => 9)
expect(response.body).to have_css('div.box',:count => 9)
所以我无法重现这个问题..。
https://stackoverflow.com/questions/24129596
复制相似问题