web-dev-qa-db-fra.com

Impossible de trouver Chrome binaire lors de l'exécution d'un test Selenium (testng) dans jenkins sous Windows 7

J'ai un test de connexion de base avec Selenium et testng. Lorsqu'il est exécuté à partir d'Eclipse, il fonctionne comme prévu et appelle Google Chrome. S'il est exécuté à partir de la ligne de commande TESTNG, il fonctionne également très bien.

Voici mon @Before:

@BeforeMethod
public void setUp() throws Exception { 
 File file = new File("C:/Selenium-driver/chromedriver.exe"); 
 System.setProperty("webdriver.chrome.driver", file.getAbsolutePath()); 
 driver = new ChromeDriver(); 
 driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
 }

Cependant, si j'exécute le même test via Jenkins, cela dit:

Building in workspace C:\EclipsePortable\Data\workspace\GS_TESTNG 
[G_TESTNG] $ cmd /c call C:\Windows\TEMP\hudson9049518275115936054.bat 

C:\EclipsePortable\Data\workspace\G_TESTNG>_test_login_cmd.bat 

C:\EclipsePortable\Data\workspace\G_TESTNG>cd C:\EclipsePortable\Data\workspace\G_TESTNG 

C:\EclipsePortable\Data\workspace\G_TESTNG>Java -cp C:\EclipsePortable\Data\workspace\G_TESTNG\lib\*;C:\EclipsePortable\Data\workspace\G_TESTNG\bin org.testng.TestNG testng.xml 
... 
... TestNG 6.9.9 by Cédric Beust ([email protected]) 
... 

[TestNG] Running: 
  C:\EclipsePortable\Data\workspace\G_TESTNG\testng.xml 

Starting ChromeDriver 2.26.436362 (5476ec6bf7ccbada1734a0cdec7d570bb042aa30) on port 36257 
Only local connections are allowed. 
FAILED CONFIGURATION: @BeforeMethod setUp 
org.openqa.Selenium.WebDriverException: unknown error: cannot find Chrome binary 
  (Driver info: chromedriver=2.26.436362 (5476ec6bf7ccbada1734a0cdec7d570bb042aa30),platform=Windows NT 6.1.7601 SP1 x86_64) (WARNING: The server did not provide any stacktrace information) 
Command duration or timeout: 664 milliseconds 
Build info: version: '2.51.0', revision: '1af067d', time: '2016-02-05 19:15:17' 
System info: Host: 'NMTLA12810', ip: '192.168.0.179', os.name: 'Windows 7', os.Arch: 'AMD64', os.version: '6.1', Java.version: '1.8.0_102' 
Driver info: org.openqa.Selenium.chrome.ChromeDriver 
        at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
        at Sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
        at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
        at Java.lang.reflect.Constructor.newInstance(Unknown Source) 
        at org.openqa.Selenium.remote.ErrorHandler.createThrowable(ErrorHandler.Java:206) 
        at org.openqa.Selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.Java:158) 
        at org.openqa.Selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.Java:678) 
        at org.openqa.Selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.Java:249) 
        at org.openqa.Selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.Java:131) 
        at org.openqa.Selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.Java:144) 
        at org.openqa.Selenium.chrome.ChromeDriver.<init>(ChromeDriver.Java:170) 
        at org.openqa.Selenium.chrome.ChromeDriver.<init>(ChromeDriver.Java:159) 
        at org.openqa.Selenium.chrome.ChromeDriver.<init>(ChromeDriver.Java:116) 
        at com.test.TestA.setUp(TestA.Java:33) 
        at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
        at Sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
        at Sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
        at Java.lang.reflect.Method.invoke(Unknown Source) 
        at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.Java:85) 
        at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.Java:510) 
        at org.testng.internal.Invoker.invokeConfigurations(Invoker.Java:211) 
        at org.testng.internal.Invoker.invokeMethod(Invoker.Java:585) 
        at org.testng.internal.Invoker.invokeTestMethod(Invoker.Java:816) 
        at org.testng.internal.Invoker.invokeTestMethods(Invoker.Java:1124) 
        at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.Java:125) 
        at org.testng.internal.TestMethodWorker.run(TestMethodWorker.Java:108) 
        at org.testng.TestRunner.privateRun(TestRunner.Java:774) 
        at org.testng.TestRunner.run(TestRunner.Java:624) 
        at org.testng.SuiteRunner.runTest(SuiteRunner.Java:359) 
        at org.testng.SuiteRunner.runSequentially(SuiteRunner.Java:354) 
        at org.testng.SuiteRunner.privateRun(SuiteRunner.Java:312) 
        at org.testng.SuiteRunner.run(SuiteRunner.Java:261) 
        at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.Java:52) 
        at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.Java:86) 
        at org.testng.TestNG.runSuitesSequentially(TestNG.Java:1215) 
        at org.testng.TestNG.runSuitesLocally(TestNG.Java:1140) 
        at org.testng.TestNG.run(TestNG.Java:1048) 
        at org.testng.TestNG.privateMain(TestNG.Java:1355) 
        at org.testng.TestNG.main(TestNG.Java:1324) 

SKIPPED CONFIGURATION: @AfterClass tearDown 
SKIPPED: testGooglePageTitleInChrome 

=============================================== 
    TestNG Test Group 
    Tests run: 1, Failures: 0, Skips: 1 
    Configuration Failures: 1, Skips: 1 
=============================================== 


=============================================== 
Main Test Suite 
Total tests run: 1, Failures: 0, Skips: 1 
Configuration Failures: 1, Skips: 1 
=============================================== 

[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@7fbe847c: 16 ms 
[TestNG] Time taken by org.testng.reporters.jq.Main@759ebb3d: 78 ms 
[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@ba8a1dc: 59 ms 
[TestNG] Time taken by org.testng.reporters.XMLReporter@1c655221: 5 ms 
[TestNG] Time taken by org.testng.reporters.EmailableReporter2@1edf1c96: 16 ms 
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 0 ms 
Build step 'Exécuter une ligne de commande batch Windows' marked build as failure 
Finished: FAILURE
7
Templog Log

Il est possible que chrome soit installé sur votre AppData (surtout si vous êtes sur Windows 7). Je suppose que Jenkins n'a pas pu accéder au binaire depuis votre répertoire utilisateur. Assurez-vous que le répertoire que vous avez = Chrome activé, est accessible à Jenkins, ou essayez de réinstaller chrome à nouveau dans le répertoire des fichiers du programme).

D'autre part, vous pouvez simplement indiquer à Chromedriver où chercher Chrome Binary,

ChromeOptions chromeOptions= new ChromeOptions();
chromeOptions.setBinary("C:\\ThePAthtoChrome.exe");

ChromeDriver driver = new ChromeDriver(chromeOptions);
5
Prageeth Saravanan

Le problème est ces lignes dans votre code:

File file = new File("C:/Selenium-driver/chromedriver.exe"); 
System.setProperty("webdriver.chrome.driver", file.getAbsolutePath()); 

C'est un anti-motif massif que je vois régulièrement. Le webdriver.chrome.driver la variable d'environnement a été conçue pour que vous puissiez installer vos fichiers binaires chromedriver sur plusieurs systèmes à différents endroits, puis définir la variable d'environnement sur chaque système de sorte que si un test au sélénium est jamais exécuté sur ce système, il détectera automatiquement l'emplacement de le binaire.

En codant en dur cette variable d'environnement via du code, vous ignorez toute variable d'environnement préconfigurée qui a été configurée lors de la création de l'agent de génération, vous ne l'utilisez pas de la manière prévue.

Si vous insistez pour le faire de cette façon, vous devez toujours vérifier si la variable env est déjà définie avant de la définir, de cette façon vous n'écraserez pas la variable env existante. Vous devrez également vous assurer que le chemin de fichier que vous avez codé en dur existe sur votre agent de génération (la cause secondaire de votre erreur est qu'il ne le fait pas) afin que si la variable env n'est pas définie, vous définissez réellement un chemin valide vers le binaire chromedriver.

1
Ardesco

J'ai eu le même problème, j'ai pu exécuter des scripts Selenium via local mais quand j'ai essayé de l'exécuter sur Jenkins, j'ai obtenu l'erreur "erreur inconnue: impossible de trouver Chrome binaire").

Voici ma solution qui a fonctionné sur le serveur Jenkins: 1. Téléchargez et activez Xvfb avant de démarrer le script Selenium sur jenkins. Pour plus d'informations, lisez ici https://wiki.jenkins.io/display/JENKINS/Xvfb+Plugin 2. J'utilise ubuntu 16.xx os sur le serveur local et jenkins. 3. Essayez de conserver chromedriver dans le dossier "usr/bin" uniquement, sinon vous pourriez obtenir une erreur.

try {

            if(service == null){
                service = new ChromeDriverService.Builder()
                        .usingDriverExecutable(new File("/usr/bin/chromedriver"))// set the chromedriver path
                       .usingAnyFreePort()
                        .withEnvironment(ImmutableMap.of("DISPLAY", ":15"))
                        .withSilent(true)
                        .build();
                service.start();
            }

            System.out.println("Reading chrome driver");
            System.setProperty("webdriver.chrome.driver","/usr/bin/chromedriver");
            ChromeOptions chromeOptions = new ChromeOptions();
            chromeOptions.addArguments("--headless");
            WebDriver driver = new ChromeDriver(chromeOptions);
            driver.get("https://google.com");
            driver.quit();
 }
        catch(Exception ex){
        System.out.println(ex.getMessage());
        }

1

Je pense que vous devez installer chrome dans votre instance. Pour cela, vous suivez ces commandes de base

wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
Sudo yum install ./google-chrome-stable_current_*.rpm

google-chrome &
1
Rajesh Thakur