我有以下测试:
expect(page).to have_selector('ul', count: 1)
expect(page).to have_selector('li', count: 21)
expect(page).to have_selector('li img', count: 21)
基本上我想检查列表是否存在,它是否有21个项目,并且每个项目都有一个图像。
我的代码存在的问题是,如果第一个元素有2个图像,而第二个元素没有,那么它仍会通过。
我如何单独检查每个列表项?像这样......
expect(page).to have_selector('ul', count: 1)
expect(page).to have_selector('li', count: 21)
foreach('li') do |item|
expect(item).to have_selector('img', count: 1)
end
答案 0 :(得分:2)
Florent B.的答案是正确的,并测试你想要的。以您认为可以执行类似
的方式进行检查expect(page).to have_selector('ul', count: 1)
lis = page.all('li', count: 21) # same effect as expectation since it will raise an exception if not 21 on page but gets access to the elements
lis.each do |li|
expect(li).to have_selector('img', count: 1)
end
然而,由于执行Florent B答案的查询数量会更快
答案 1 :(得分:1)
我只想检查一下XPath没有li
,其中图像数不是1:
expect(page).to have_selector('ul', count: 1)
expect(page).to have_selector('ul li', count: 21)
expect(page).to have_selector('ul li img', count: 21)
expect(page).to have_no_xpath('//ul//li[count(.//img) != 1]')