0

在运行我的规范时,我收到错误,Capybara 无法根据标签等找到元素。然后我想我想要 HTML,或者以某种方式调试错误。

这是 /features/merge.feature

#Just a test!
Scenario: Cannot merge articles when not admin
    Given I am not an admin
    When I am on the edit article page
    Then I should not see the "merge articles" form

这是:/feature/step_definitions/merge.rb - 它只包含“Given”语句!

Given /am not an admin$/ do
  visit '/accounts/login'
  puts "TEZT"
  puts page.native
  puts page.native.text
  fill_in 'user_login', :with => 'editor_rico'
  fill_in 'user_password', :with => 'a'
  click_button 'Login'
end

Given /^I am an admin$/ do
  visit '/accounts/login'
  fill_in 'user_login', :with => 'admin_rico'
  fill_in 'user_password', :with => 'a'
  click_button 'Login'
end

然后我得到这个错误:

Scenario: Cannot merge articles when not admin    
# features/article_merging.feature:20
Given I am not an admin                 
#features/step_definitions/article_steps.rb:39
cannot fill in, no text field, text area or password field with id, name, or label
'user_login' found (Capybara::ElementNotFound)
(eval):2:in `fill_in'
./features/step_definitions/article_steps.rb:44:in `/am not an admin$/'
features/article_merging.feature:21:in `Given I am not an admin'

在这里和 Cucumber 一起工作很艰难..

1)为什么我得到上述

2)我如何调试它,我想看HTML代码!

4

3 回答 3

3

当您的页面 HTML 不包含任何具有 name、id 或 label 的元素时,就会出现inputtextarea错误'user_login'。如果将launchygem 添加到 Gemfile 中,您将能够看到页面的外观:

在你的Gemfile

group :test do
  gem 'launchy'
  gem 'capybara'
  ...
end

然后,在您的feature/step_definitions/merge.rb文件中:

Given /^I am not an admin$/ do
  visit '/accounts/login'
  save_and_open_page
end

save_and_open_page将在您的浏览器中打开当前页面,因此您可以检查 HTML 并查看它的外观。

希望能帮助到你!:)

于 2013-03-16T17:26:21.627 回答
1

它认为上述代码的问题是“页面”在您结束该部分之后才可用。

尝试将您的“看跌”放入“何时”或“然后”步骤

您可以按如下方式查询页面(假设您使用的是 RSpec)

page.should have_content 'foo'
page.should have_selector 'h1', text: => 'Hello dave'

希望这可以帮助

于 2013-03-16T13:14:02.250 回答
1

您还可以通过打印page.body到标准输出来查看 HTML 响应。

Given /^I am not an admin$/ do
  visit '/accounts/login'
  puts page.body
end
于 2019-10-25T15:39:22.290 回答