Как я могу проверить с помощью cucumber & webrat & selenium, что селектор / тег существует ровно два раза в ответе? - PullRequest
1 голос
/ 28 февраля 2010

Я использовал следующее определение шага с огурцом и вебратом, и все работало нормально:

Then /^I should see "([^\"]*)" worker in the workerlist/ do |number|
   response.should have_selector("td.worker_name", :count=>number)
end

Теперь я перешел на селен, и «почему-то» have_selector больше не принимает параметр: count. Я получаю следующую ошибку:

ArgumentError: wrong number of arguments (2 for 1)   
./features/step_definitions/worker_generation_steps.rb:15:in `have_selector'

Затем я попытался использовать assert_contain, но не смог найти регулярное выражение, которое проверяет точное число. К сожалению, следующее определение шага проходит, если число "class =" worker_name "" меньше ожидаемого числа.

Then /^I should see "([^\"]*)" worker in the workerlist/ do |number|
  assert_contain (/((.*)(class="worker_name"))#{number}/m)
end

Мои вопросы:

1.) Как я могу проверить самый простой способ, которым в моем примере "td.worker_name" появляется ровно несколько раз?

2.) Если нет способа обойти регулярное выражение: Как я могу переписать приведенное выше регулярное выражение, чтобы оно проверяло точное число «class =" worker_name »«?

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 03 марта 2010

Благодаря ответу AutomatedTester я нашел следующее рабочее решение:

Then /^I should see "([^\"]*)" worker in the workerlist/ do |number|
    response.selenium.get_xpath_count("//td[@class='worker_name']").to_i.should be(number.to_i)
end

get_xpath_count напрямую не поддерживается Webrat :: Selenium: Matchers, но я могу получить к нему доступ через базовый API селен.

0 голосов
/ 01 марта 2010

У меня нет опыта работы с Ruby или Webrat, но я бы сделал так:

    begin
        assert_equal "2", @selenium.get_xpath_count("//td[@class='worker_name']")
    rescue Test::Unit::AssertionFailedError
        @verification_errors << $!

Что означает подсчет xpath для вашего запроса, а затем убедитесь, что он равен 2. На данный момент вы не можете сделать это с помощью селекторов Selenium и CSS, если вы не используете Selenium 2

...