Нажатие на ссылки с использованием Capybara / Cucumber - PullRequest
2 голосов
/ 30 августа 2011

Я пытаюсь настроить тестирование Cucumber в приложении Jquery Mobile, но тестирование щелчками приводит к неожиданной ошибке.Вот сценарий:

problem.feature

Scenario: Clicking problem when not signed in
  When I go to the wall page for The Beast
  Then I should see "Blue"
  When I click the problem "Blue"
  Then I go to the sign up page

И соответствующий шаг, выполненный для захвата второй до последней строки, выглядит следующим образом:

steps.rb

When /^I click the problem "(.*)"$/ do |problem_name|
  find(:xpath, "//h3[text() = '#{problem_name}']/parent::a").click
end

До этого момента все проходит хорошо.Когда доходит до щелчка проблемы, выдается следующее сообщение об ошибке:

When I click the problem "Blue"
  You have a nil object when you didn't expect it!
  You might have expected an instance of Array.
  The error occurred while evaluating nil.each (ActionView::Template::Error)

Я также попытался включить отладчик непосредственно перед вызовом find (). Click в steps.rb.Когда я затем запускаю команду find вручную, она действительно возвращает следующее:

(rdb:1) p find(:xpath, "//h3[text() = 'Blue']/parent::a")
  #<Capybara::Element tag="a" path="/html/body/div/div[2]/ul/li[2]/a">

А затем запуск в отладчике с «.click» в конце выдает следующее:

(rdb:1) p find(:xpath, "//h3[text() = '#{problem_name}']/parent::a").click
  ActionView::Template::Error Exception: You have a nil object when you didn't expect it!
  You might have expected an instance of Array.
  The error occurred while evaluating nil.each
(rdb:1) p find(:xpath, "//h3[text() = '#{problem_name}']/parent::a").click
  nil

Таким образом, кажется, что Капибара может найти нужный элемент, но затем при попытке щелкнуть по нему каким-то образом устанавливает ноль?Я хотел бы знать, как я могу правильно выполнить клик, который я хочу выполнить, используя Capybara.

1 Ответ

2 голосов
/ 21 сентября 2011

Я не думаю, что есть проблема с Капибарой. Сейчас у меня та же проблема, и я думаю, что проблема заключается в том, что вам нужно использовать драйвер для тестирования действий JavaScript, таких как селен, и запускать свои тесты с использованием этого драйвера.

Я думаю, что ваша кнопка выполняет действие и обновляет страницу без всех необходимых ей объектов. Этого не произойдет, если вы используете JavaScript

...