2015-01-15 6 views
28

私は今、何の問題もなく、しばらくの間、端子を介して私のテストを実行してきた:キュウリ/カピバラエラー:引数[0]定義されていません(セレン:: webdriverを::エラー:: JavascriptError)

キュウリ以下が含まれています\新しい\ 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に自動的にアップデートされたので、今朝はブラウザの問題であったかもしれないと思った。私はアンインストールして試しましたが、それでも同じ問題です。コードは変更されていません。

私は何も変更していないので、これが原因で発生した可能性があることはわかりません。

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

+4

私がちょうどChromeDriverを試み、それが動作するFirefoxの35へのアップデートのようです。私はそれをアンインストールし、これは、Firefox 35とSelenium-webdriverを持つバグで34 – James

+10

にダウングレードするとき、それは完全にFirefoxのにすべての残留関連付けを削除信じていません。 https://code.google.com/p/selenium/issues/detail?id=8390 - それのための未解決の問題があります。 –

答えて

17

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

直接リンク:https://download-installer.cdn.mozilla.net/pub/firefox/releases/34.0.5/mac/en-US/Firefox%2034.0.5.dmghttps://support.mozilla.org/en-US/kb/install-older-version-of-firefoxから参照リンク)は、この問題に関する

詳細はここで見つけることができます:Justin Koとしてhttps://code.google.com/p/selenium/issues/detail?id=8387

+2

私は別のディレクトリにFirefoxの34を入れて、私のカピバラはセレン 'でそれを使用し作られた:: webdriverを:: Firefoxの:: Binary.path = ENV [ 'firefox_path']場合ENV [ 'firefox_path']'し、そのENV変数を設定キュウリを実行しているとき。 – nroose

4

が、これはFirefoxの35のバグであるとSelenium-webdriverを2.44.0、コメント。 Seleniumプロジェクトにはチケットが発行されています。書面には、修正を含むプレリリースの宝石(2.45.0.dev3)があります。他の人のよう

https://code.google.com/p/selenium/issues/detail?id=8390

3

言ってきた、それを回避するためのFirefox 35 にバグがあり、私はそれが最も簡単なChromeのセレンテストを実行するためにカピバラを設定への見つけました。だから、特にFirefoxでテストを実行する必要がないなら、chromedriverを使うことができます。

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

0

ここにfirefoxドライバと同じ問題があります。 34.0.5へのFirefoxとJavascriptをダウングレード

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) 

クリックしてください:

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

は魅力のように再び動作します。

そしてネイティブのクリックだけであまりにも信頼性が低いことから、作業javascriptのクリックを持つことが非常に重要です。

関連する問題