Как утверждать на количество строк таблицы html в рубине с использованием capybara + огурец
Я пытаюсь справиться с веб-разработкой BDD в Ruby, используя огурец + capybara, и я застрял в том, что должно быть простой задачей - просто проверить количество строк в таблице. Целью того, что я пытаюсь достичь, является нечто вроде:
page.should have_xpath("//table[@id='myTable']")
find("//table[@id='myTable']/tr").length.should == 3
Но это не работает (длина отсутствующего метода), и я не могу найти способ утверждать ее относительно длины таблицы.
Любые идеи никому (пожалуйста, будьте спокойны, я "рубиновый nooby" )
Заранее спасибо
Neil
Ответы
Ответ 1
Я пошел с этим в конце:
Then /^I should see "(.*)" once$/ do |text|
within_table('myTable') do
should have_xpath("//tr", :text => text, :count => 1)
end
end
который казался достаточно элегантным.
Я понимаю, что другие ответы работают, но это, кажется, хорошо читается.
Любые комментарии?
Ответ 2
Даже если have_css?
выполнит трюк, ваши тесты должны рассказать вам, как они потерпели неудачу, вместо того, чтобы просто сказать, что какое-то условие должно быть истинным, и оно было ложным. Имея это в виду, первый пример ниже читается намного лучше второго:
# IF FAILED => "expected 10, got 7"
page.all('table#myTable tr').count.should == 10
# IF FAILED => "expected true, got false"
page.should have_css("table#myTable tr", :count=>10)
Ответ 3
Я думаю, вы можете это сделать:
page.should have_css("table#mytable tr", :count=>3)
Ответ 4
По какой-то причине "has_css" не работает для меня, однако "все (селектор)" работает очень хорошо
all("table#movies tr").count
Ответ 5
Метод #find возвращает только один элемент (я думаю, что он просто возвращает первый, если есть несколько совпадений), поэтому вы не получаете метод #length, потому что результат #find - это Node не массив.
Чтобы доказать это самому себе, попробуйте
puts find("//table[@id='myTable']/tr").class
То, что вы хотите, - это #all, который вернет вам массив всех соответствующих узлов.
Ответ 6
Таким образом, вы можете узнать количество строк в таблице html.
area = find_by_id('#areaID').all('tr').size
Предположим, что в начале таблицы есть столбцы. Таким образом вы можете достичь фактического числа.
area = area-1