1

Cucumber テストを BrowserStack で動作させようとしています。問題は、テスト環境がすべて VPN の背後にあることです。BrowserStack のドキュメントによると、ローカル テストを設定するだけで動作します。そうではありません。テストは開始されますが、vpn クレデンシャルを取得するためにローカル マシンを経由して再ルーティングされません。BrowserStack の指示に従ってバイナリをダウンロードしました。コマンドで起動しました

~ ./BrowserStackLocal <my BS key> -forcelocal

次に、(別のターミナル ウィンドウで) テストを実行します。

bundle exec cucumber CURRENT_BROWSER=browserstack features/01_login.feature 

私のenv.rbは次のようになります:

require 'cucumber/rails'

Capybara.default_selector = :css

cb = ENV['CURRENT_BROWSER']
testbrowser = cb ? cb.downcase.to_sym : :firefox
puts "-------------- current browser: #{testbrowser}........."
Capybara.register_driver :selenium do |app|
  if RbConfig::CONFIG['host_os'][/linux/] && testbrowser.to_s.eql?("CHROME".downcase)
    Capybara::Selenium::Driver.new(app, {:browser => :remote, :url => "http://127.0.0.1:9515"})
  else
    if testbrowser.eql?(:chrome)
      prefs = {
          :download => {
              :prompt_for_download => false,
              :default_directory => DownloadHelpers::PATH.to_s
          }
      }
      Capybara::Selenium::Driver.new(app, :browser => :chrome, :prefs => prefs, :switches => %w[--test-type])
    elsif testbrowser.eql?(:browserstack)
      stackToUse = ENV['BS_STACK'] || 'ie_9'
      json = JSON.load(open(File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'browsers.json'))))
      config = json[stackToUse]
      unless config
        puts "invalid BS_STACK specified. Was '#{stackToUse}'"
        return
      end

      # Add default config
      config['name'] = "#{config['os']} #{config['os_version']} - #{Time.now.strftime '%Y-%m-%d %H:%M'}"
      config['acceptSslCert'] = true
      config['browserstack.debug'] = true
      Capybara::Selenium::Driver.new(app, :browser => :remote, :desired_capabilities => config, :url => "http://<BS_USERNAME>:<BS_PASSKEY>@hub.browserstack.com/wd/hub")
    elsif testbrowser.eql?(:internetexplorer)
      Capybara::Selenium::Driver.new(app, :browser => :internetexplorer, :switches => %w[--test-type])
    else
      profile = Selenium::WebDriver::Firefox::Profile.new
      profile
      profile["browser.download.dir"] = DownloadHelpers::PATH.to_s
      profile["browser.download.folderList"] = 2 # 2 - save to user defined location
      profile["browser.download.manager.alertOnEXEOpen"] = false
      profile["browser.helperApps.neverAsk.saveToDisk"] = "application/msword, application/csv, application/ris, text/csv, image/png, application/pdf, text/html, text/plain, application/zip, application/x-zip, application/x-zip-compressed, application/download, application/octet-stream, data:application/csv"
      profile["browser.helperApps.alwaysAsk.force"] = false
      profile["browser.download.manager.showWhenStarting"] = false
      profile["browser.download.manager.focusWhenStarting"] = false
      profile["browser.download.useDownloadDir"] = true
      profile["browser.download.manager.alertOnEXEOpen"] = false
      profile["browser.download.manager.closeWhenDone"] = true
      profile["browser.download.manager.showAlertOnComplete"] = false
      profile["browser.download.manager.useWindow"] = false

profile["services.sync.prefs.sync.browser.download.manager.showWhenStarting"] = false
      profile["pdfjs.disabled"] = true
      Capybara::Selenium::Driver.new(app, :browser => testbrowser, :profile => profile)
    end
  end
end

ActionController::Base.allow_rescue = false

# Remove/comment out the lines below if your app doesn't have a database.
# For some databases (like MongoDB and CouchDB) you may need to use :truncation instead.
begin
  DatabaseCleaner.strategy = :transaction
rescue NameError
  raise "You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it."
end

# You may also want to configure DatabaseCleaner to use different strategies for certain features and scenarios.
# See the DatabaseCleaner documentation for details. Example:
#
#   Before('@no-txn,@selenium,@culerity,@celerity,@javascript') do
#     # { :except => [:widgets] } may not do what you expect here
#     # as tCucumber::Rails::Database.javascript_strategy overrides
#     # this setting.
#     DatabaseCleaner.strategy = :truncation
#   end
#
#   Before('~@no-txn', '~@selenium', '~@culerity', '~@celerity', '~@javascript') do
#     DatabaseCleaner.strategy = :transaction
#   end
#

# Possible values are :truncation and :transaction
# The :transaction strategy is faster, but might give you threading problems.
# See https://github.com/cucumber/cucumber-rails/blob/master/features/choose_javascript_database_strategy.feature
Cucumber::Rails::Database.javascript_strategy = :truncation

他の人がこれらの同じテストを使用し、私たちは何十ものテストを作成しました。そのため、これらのテストをローカルで実行できることを確認することが最も重要です。テストを実行すると、ブラウザスタックで実行され始めますが、到達するように指示しようとしたサイトのいずれにも到達できません。http://localhost:3000/loginを含めて BrowserStack サポートに連絡したところ、ローカル テストをセットアップしたかどうか尋ねられました。私が得ている唯一のエラーは、テストがログインする CSS 要素を見つけられないということです。自動化されたテストを browserstack で見たところ、ページに到達していないことがわかりました。「おっと、このリンクは壊れているようです」とだけ表示されます。どんな提案でも大歓迎です。

4

1 に答える 1

2

BrowserStack のサポートから連絡がありました。env.rb には、次のような別の構成プロパティが必要でした。

config['browserstack.local'] = true

今の私の唯一の問題は、私たちが書いた機能がどれも IE で動作しないように見えることです。したがって、ブラウザスタックでクロムまたはファイアフォックスをテストできますが、その機能は既にセットアップされています。

于 2015-04-02T20:13:24.077 に答える