Как определить количество строк HTML-таблицы в ruby, используя capybara + cucumber - PullRequest
37 голосов
/ 07 июня 2010

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

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

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

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

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

Нил

Ответы [ 6 ]

56 голосов
/ 16 марта 2012

Несмотря на то, что 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)
19 голосов
/ 01 июля 2010

Я думаю, вы можете сделать это:

page.should have_css("table#mytable tr", :count=>3)
13 голосов
/ 15 марта 2012

По какой-то причине "has_css" не работает для меня, однако "all (селектор)" работает очень хорошо

all("table#movies tr").count
3 голосов
/ 13 июля 2010

Я пошел с этим в конце концов:

Then /^I should see "(.*)" once$/ do |text|
    within_table('myTable') do
      should have_xpath("//tr", :text => text, :count => 1)
    end
end

, что выглядело достаточно элегантно.

Я понимаю, что другие ответы работают, но, похоже, это хорошо читается.

Есть комментарии?

1 голос
/ 13 июля 2010

Метод #find возвращает только один элемент (я думаю, он просто возвращает первый, если есть несколько совпадений), поэтому вы не получите метод #length, потому что результатом #find является Node, а не Array.

Чтобы доказать это себе, попробуйте

puts find("//table[@id='myTable']/tr").class

. То, что вы хотите, это #all, который вернет вам массив всех соответствующих узлов.

0 голосов
/ 03 ноября 2017

Таким образом, вы можете узнать количество строк в таблице HTML.

area = find_by_id('#areaID').all('tr').size

Предположим, что в начале таблицы есть столбцы. Таким образом, вы можете получить действительное число.

area = area-1
...