开发者

Clicking links using Capybara/Cucumber

开发者 https://www.devze.com 2023-03-31 16:13 出处:网络
I\'m attempting to set up Cucumber testing on a Jquery开发者_StackOverflow Mobile app, but testing clicks is throwing an unexpected error.Here is the scenario:

I'm attempting to set up Cucumber testing on a Jquery开发者_StackOverflow Mobile app, but testing clicks is throwing an unexpected error. Here is the scenario:

problems.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

And the relevant step implemented to capture the second to last line is as follows:

steps.rb

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

Everything passes fine up until that point. When it gets to clicking the problem, the following error is thrown:

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)

I have also tried including a debugger immediately before the find().click call in steps.rb. When I then run the find command manually, it does indeed return the following:

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

And then running in debugger with the '.click' on the end produces the following:

(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

So it appears that Capybara can find the right element, but then when attempting to click it somehow sets it to nil? I'd like to know how I can properly execute the click that I'm looking to execute using Capybara.


I don't think there is a problem with Capybara. Right now I have the same problem and I think the problem is that you need to use a driver for test JavaScript actions such as selenium and run your tests using this driver.

I think your button is executing the action and refreshing the page without the all the objects it need. This will not happen if you use JavaScript

0

精彩评论

暂无评论...
验证码 换一张
取 消