web-dev-qa-db-fra.com

Erreur concombre/capybara: les arguments [0] sont indéfinis (Selenium :: WebDriver :: Error :: JavascriptError)

Je fais mes tests via le terminal depuis un moment maintenant sans aucun problème .:

concombre Create\New\Game.feature

Qui contient les éléments suivants:

Feature: Create New Game

  Background: 
    Given I am logged in

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

Et le rubis:

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 défini comme:

# 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

Rien de ce qui précède n'a changé depuis le début des tests jusqu'à maintenant. Aujourd'hui, lorsque je commence les tests, dès que Firefox est ouvert, j'ai immédiatement:

  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)

Comme vous pouvez le constater, cela échoue sur la première ligne. Je ne sais pas pourquoi.

J'ai mis à jour toutes mes perles pour m'assurer que tout était frais, mais cela n'a pas fonctionné. Je pensais que cela pouvait être un problème de navigateur, mon système étant automatiquement mis à jour vers Firefox 35.0 ce matin. J'ai désinstallé et essayé 34 mais c'est toujours le même problème. Aucun code n'a changé.

Je ne sais pas quelle autre mauvaise configuration aurait pu causer cela car je n’ai rien changé.

Quelqu'un peut-il aider davantage avec cette erreur?

28
James

Oui, le problème vient de Firefox 35. Passez à la version 34. C'est peut-être la façon dont vous avez procédé à la dégradation. J'ai simplement exécuté le nouveau programme d'installation de DMG et confirmé l'effacement de l'application existante. 

Lien direct: https://download-installer.cdn.mozilla.net/pub/firefox/releases/34.0.5/mac/en-US/Firefox%2034.0.5.dmg (lien référencé depuis https://support.mozilla.org/en-US/kb/install-older-version-of-firefox )

Pour en savoir plus sur ce problème, rendez-vous ici: https://code.google.com/p/Selenium/issues/detail?id=8387

17
user1322092

Comme Justin Ko a commenté, il s'agit d'un bogue avec Firefox 35 et Selenium-WebDriver 2.44.0. Le projet Selenium a un ticket de sortie pour celui-ci et, au moment de la rédaction de ce document, il existe une gem préliminaire (2.45.0.dev3) qui inclut le correctif.

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

4
Marc L

Comme d'autres l'ont déjà dit, il existe un bogue dans Firefox 35. Pour éviter cela, j'ai trouvé qu'il était plus facile de configurer Capybara pour exécuter des tests Selenium dans Chrome. Donc, si vous n'avez pas besoin d'exécuter des tests, en particulier dans Firefox, vous pouvez utiliser chromedriver.

Il y a un bijou pour l'obtenir facilement.

3
samutamm

Même problème avec le pilote firefox ici.

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 rétrogradé à 34.0.5 et le clic Javascript:

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

Fonctionne à nouveau comme un charme.

Et il est très important d'avoir un clic javascript fonctionnel, car le clic natif est trop peu fiable.

0
99Sono