Как проверить несколько вхождений слова, используя Capybara (или Webrat, я думаю) и огурец?
-
26-09-2019 - |
Вопрос
я знаю это /Interface \d/
Происходит три раза на странице. Но я не знаю, как тестировать на это с Capybara в огурце. Вот моя первая попытка:
Then /^(?:|I )should see \/([^\/]*)\/ (\d+)(?:x|X| times?)?$/ do |regexp, count|
regexp = Regexp.new(regexp)
count = count.to_i
if page.respond_to? :should
page.should have_xpath('//*', { :text => regexp, :count => count })
else
assert page.has_xpath?('//*', { :text => regexp, :count => count })
end
end
Тем не менее, это возвращает false для моего Then I should see /Interface \d+/ 3 times
.
Я разобрался, что это потому, что has_xpath
использует all
. Отказ Положить это в мой тест:
puts all(:xpath, '//*', { :text => regexp}).map {|e| pp e}
приводит к
#<Capybara::Element tag="html" path="/html">
#<Capybara::Element tag="body" path="/html/body">
#<Capybara::Element tag="div" path="/html/body/div">
#<Capybara::Element tag="div" path="/html/body/div/div[2]">
#<Capybara::Element tag="table" path="/html/body/div/div[2]/table">
#<Capybara::Element tag="tbody" path="/html/body/div/div[2]/table/tbody">
#<Capybara::Element tag="tr" path="/html/body/div/div[2]/table/tbody/tr[1]">
#<Capybara::Element tag="td" path="/html/body/div/div[2]/table/tbody/tr[1]/td[3]">
#<Capybara::Element tag="tr" path="/html/body/div/div[2]/table/tbody/tr[2]">
#<Capybara::Element tag="td" path="/html/body/div/div[2]/table/tbody/tr[2]/td[3]">
#<Capybara::Element tag="tr" path="/html/body/div/div[2]/table/tbody/tr[3]">
#<Capybara::Element tag="td" path="/html/body/div/div[2]/table/tbody/tr[3]/td[3]">
Поэтому я получаю значение каждого шага по пути к элементам, которые содержат мой текст. : -
Я думал, может быть has_content
спас меня, но он не принимает счет.
Помощь!
Решение
Что-то вроде этого должно работать:
Then /^(?:|I )should see \/([^\/]*)\/ (\d+)(?:x|X| times?)?$/ do |regexp, count|
regexp = Regexp.new(regexp)
count = count.to_i
page.find(:xpath, '//body').text.split(regexp).length.should == count+1
end
Не связан с StackOverflow