7

使用黄瓜、水豚和硒进行设置,但有些场景只能随机运行。 在 rvm rails 2.3.8 selenium 上
运行ruby​​ 1.8.6 会 弹出打开 firefox 3.6 我试图添加这个但没有运气:




with_scope(selector) do
  click_button(button)
  selenium.wait_for_page_to_load
end

错误输出有时是:

>  Given I am logged in and have created newsletter and subscribers                           # features/step_definitions/newsletter_send_steps.rb:108
      end of file reached (EOFError)
      /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/net/protocol.rb:133:in `sysread'
      /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/net/protocol.rb:133:in `rbuf_fill'
      /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/timeout.rb:62:in `timeout'
      /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/timeout.rb:93:in `timeout'
      /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/net/protocol.rb:132:in `rbuf_fill'
      /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/net/protocol.rb:116:in `readuntil'
      /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/net/protocol.rb:126:in `readline'
      /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/net/http.rb:2020:in `read_status_line'
      /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/net/http.rb:2009:in `read_new'
      /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/net/http.rb:1050:in `request_without_fakeweb'
      /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/net/http.rb:1037:in `request_without_fakeweb'
      /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/net/http.rb:543:in `start'
      /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/net/http.rb:1035:in `request_without_fakeweb'
      ./features/step_definitions/web_steps.rb:24:in `__instance_exec2'
      ./features/step_definitions/web_steps.rb:9:in `with_scope'
      ./features/step_definitions/web_steps.rb:9:in `with_scope'
      ./features/step_definitions/web_steps.rb:23:in `/^(?:|I )press "([^\"]*)"(?: within "([^\"]*)")?$/'
      features/enhanced/newsletter_send1.feature:7:in `Given I am logged in and have created newsletter and subscribers'

其他时候:

> no button with value or id or text 'create_user_button' found (Capybara::ElementNotFound)
      ./features/step_definitions/web_steps.rb:24:in `__instance_exec2'
      ./features/step_definitions/web_steps.rb:9:in `with_scope'
      ./features/step_definitions/web_steps.rb:9:in `with_scope'
      ./features/step_definitions/web_steps.rb:23:in `/^(?:|I )press "([^\"]*)"(?: within "([^\"]*)")?$/'
      features/enhanced/newsletter_send1.feature:7:in `Given I am logged in and have created newsletter and subscribers'

有时它只是有效....

这就是我的 env.rb 的样子

ENV["RAILS_ENV"] ||= "cucumber"
require File.expand_path(File.dirname(__FILE__) + '/../../config/environment')

require 'cucumber/formatter/unicode' # Remove this line if you don't want Cucumber Unicode support
require 'cucumber/rails/world'
require 'cucumber/rails/active_record'
require 'cucumber/web/tableish'
require 'capybara/rails'
require 'capybara/cucumber'
require 'capybara/session'
require 'cucumber/rails/capybara_javascript_emulation' 
require "selenium-webdriver"

Capybara.default_driver = :selenium
Capybara.default_wait_time = 5 
Capybara.ignore_hidden_elements = false
Capybara.default_selector = :css

ActionController::Base.allow_rescue = false

require 'database_cleaner'
DatabaseCleaner.strategy = :truncation

Before do
 Capybara.reset_sessions!
 DatabaseCleaner.clean
end

Cucumber::Rails::World.use_transactional_fixtures = false

黄瓜步骤:
假设我在注册页面上
,我在“body”中用“jeppsipeppsi@arcticelvis.com”填写“user_login”,在“body”
中用“secret”填写“user_password”,
然后我填写“在“body”中带有“secret”的user_password_confirmation”
我在“body”中检查“terms_of_use”并在“body”中
按“create_user_button”

任何见解都会很棒:)

4

2 回答 2

3

这是 HTTP 模拟,如果您(完全)从您的环境中删除 fakeweb 或 webmock,它应该会再次工作。

Adam Greene 的最后一条评论对于设置 Curb 有效:Selenium::WebDriver.for :firefox, :http_client => Selenium::WebDriver::Remote::Http::Curb

阅读 Capybara 组的主题。

我们遇到的问题是使用 fakeweb 或 webmock 回放记录的 http 流量,因为 web 驱动程序现在是 Curb。因此,如果您的目标是伪造 Capybara 上的流量,您将让浏览器测试再次工作,但您将无法在同一个浏览器上播放流量。(我们正在使用 VCR 进行录制。)

添加遏制支持在 Fakeweb 的 Github 问题网站上列为“票证”。

于 2010-07-07T18:42:08.233 回答
0

我最近在带有 cucumber/capybara/akephalos/fakeweb 的 Rails 2.3 应用程序中遇到了这个问题,但最终通过完全杀死我捆绑中的所有 gem 来解决这个问题(它们保留.bundle/并重新安装。

于 2012-02-09T11:22:08.163 回答