在几个对象上运行测试

时间:2016-08-17 12:15:03

标签: capybara

我有以下测试:

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

2 个答案:

答案 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]')