web-dev-qa-db-ja.com

Cucumber / Capybaraエラー:arguments [0]が未定義です(Selenium :: WebDriver :: Error :: JavascriptError)

しばらくの間、ターミナルを介して問題なくテストを実行しています。

きゅうりCreate\New\Game.feature

これには次のものが含まれます。

Feature: Create New Game

  Background: 
    Given I am logged in

  Scenario: Cleanup & New Game 01
    Then I Delete all test Games

そしてRuby:

Given(/^I am logged in$/) do
  el = first("button[ttag='account_dropdown_btn']", :visible => true)
  if el.nil?
    logMeIn("[email protected]","pa55w0rd")
  end
end

logMeInは次のように定義されます:

# Logs the user in with given credentials
def logMeIn(username, password)
  page.driver.browser.manage.window.maximize
  visit ENV['BASE_URL']
  fill_in 'j_username', :with => username
  fill_in 'j_password', :with => password
  click_button 'Login'
end

上記のいずれも、テストが機能していたときから現在まで変更されていません。今日、テストを開始すると、Firefoxが開くとすぐに、次のようになります。

  Background:            # features/Create New Game.feature:4
    Given I am logged in # features/step_definitions/Generic Steps.rb:1
      arguments[0] is undefined (Selenium::WebDriver::Error::JavascriptError)

ご覧のとおり、最初の行で失敗しています。理由はわかりません。

すべてが新鮮であることを確認するためにすべての宝石を更新しましたが、これは機能しませんでした。今朝、システムがFirefox 35.0に自動的に更新されたため、ブラウザの問題である可能性があると思いました。アンインストールして34を試しましたが、それでも同じ問題です。コードは変更されていません。

私は何も変更していないので、他のどのような設定ミスがこれを引き起こしたのかわかりません。

誰かがこのエラーをさらに助けることができますか?

28
James

はい、問題はFirefox35にあります。バージョン34にダウングレードします。おそらくそれがダウングレードの方法です。新しいDMGインストーラーを実行し、既存のアプリを上書きすることを確認しました。

直接リンク: https://download-installer.cdn.mozilla.net/pub/firefox/releases/34.0.5/mac/en-US/Firefox%2034.0.5.dmg (リンク参照から https://support.mozilla.org/en-US/kb/install-older-version-of-firefox

この問題の詳細については、こちらをご覧ください: https://code.google.com/p/Selenium/issues/detail?id=8387

17
user1322092

Justin Ko がコメントしたように、これはFirefox35とSelenium-WebDriver2.44.0のバグです。 Seleniumプロジェクトには問題チケットがあり、執筆時点では、修正を含むプレリリースgem(2.45.0.dev3)があります。

https://code.google.com/p/Selenium/issues/detail?id=839

4
Marc L

他の人が言っているように、Firefox 35にはバグがあります。それを回避するには、ChromeでSeleniumテストを実行するようにCapybaraを構成するのが最も簡単であることがわかりました。したがって、特にFirefoxでテストを実行する必要がない場合は、chromedriverを使用できます。

簡単に入手できる gem があります。

3
samutamm

ここでFirefoxドライバーと同じ問題。

Caused by: org.openqa.Selenium.WebDriverException: arguments[0] is undefined
Command duration or timeout: 24 milliseconds
Build info: version: '2.44.0', revision: '76d78cf323ce037c5f92db6c1bba601c2ac43ad8', time: '2014-10-23 13:11:40'
System info: Host: '', ip: '', os.name: 'Windows 7', os.Arch: 'AMD64', os.version: '6.1', Java.version: '1.7.0_71'
Session ID: 49a4f55c-33b7-4ab8-aea5-cb3bb98041e1
Driver info: org.openqa.Selenium.firefox.FirefoxDriver
Capabilities [{platform=WINDOWS, acceptSslCerts=true, javascriptEnabled=true, cssSelectorsEnabled=true, databaseEnabled=true, browserName=firefox, handlesAlerts=true, nativeEvents=false, webStorageEnabled=true, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=35.0.1}]
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:57)
    at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
    at Java.lang.reflect.Constructor.newInstance(Constructor.Java:526)
    at org.openqa.Selenium.remote.ErrorHandler.createThrowable(ErrorHandler.Java:204)
    at org.openqa.Selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.Java:156)
    at org.openqa.Selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.Java:599)
    at org.openqa.Selenium.remote.RemoteWebDriver.executeScript(RemoteWebDriver.Java:508)

Firefoxを34.0.5にダウングレードし、Javascriptをクリックします。

executeScript("arguments[0].click();", el);

再び魅力のように機能します。

また、ネイティブクリックは信頼性が非常に低いため、JavaScriptクリックを機能させることは非常に重要です。

0
99Sono