Подтвердить что ты не робот

Как утверждать на количество строк таблицы html в рубине с использованием capybara + огурец

Я пытаюсь справиться с веб-разработкой BDD в Ruby, используя огурец + capybara, и я застрял в том, что должно быть простой задачей - просто проверить количество строк в таблице. Целью того, что я пытаюсь достичь, является нечто вроде:

page.should have_xpath("//table[@id='myTable']")
find("//table[@id='myTable']/tr").length.should == 3

Но это не работает (длина отсутствующего метода), и я не могу найти способ утверждать ее относительно длины таблицы.

Любые идеи никому (пожалуйста, будьте спокойны, я "рубиновый nooby" )

Заранее спасибо

Neil

4b9b3361

Ответ 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