2017-09-06 2 views
2

J'ai configuré un projet Java avec des tests d'acceptation (c'est-à-dire des tests de concordance). Localement avec un pilote chrome et phantomjs (sous windows) les tests sont passés (c'est-à-dire courus par gradle).Openshift - gitlab-cli - phantomjs - WebDriverException: délai d'attente de démarrage du serveur de pilotes

lors de l'exécution sur gitlab ce-ci (avec un coureur OpenShift), je reçois l'exception suivante:

java.lang.ExceptionInInitializerError 
    at be.axians.actemium.milter.helper.BrowserTestParent.openBrowser(BrowserTestParent.java:32) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 

    ... 

    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) 
    at java.lang.Thread.run(Thread.java:748) 
Caused by: org.openqa.selenium.WebDriverException: Timed out waiting for driver server to start. 
Build info: version: '3.4.0', revision: 'unknown', time: 'unknown' 
System info: host: 'runner-5408090a-project-349-concurrent-0dtvl2', ip: '10.131.1.51', os.name: 'Linux', os.arch: 'amd64', os.version: '3.10.0-514.26.1.el7.x86_64', java.version: '1.8.0_131' 
Driver info: driver.version: PhantomJSDriver 
    at org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService.java:193) 
    at org.openqa.selenium.remote.service.DriverService.start(DriverService.java:181) 
    at org.openqa.selenium.phantomjs.PhantomJSCommandExecutor.execute(PhantomJSCommandExecutor.java:78) 
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:637) 
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:250) 
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:236) 
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:137) 
    at org.openqa.selenium.phantomjs.PhantomJSDriver.<init>(PhantomJSDriver.java:116) 
    at be.axians.actemium.milter.helper.WebDriverManager.<clinit>(WebDriverManager.java:53) 
    ... 52 more 
Caused by: org.openqa.selenium.net.UrlChecker$TimeoutException: Timed out waiting for [http://localhost:7465/status] to be available after 20001 ms 
    at org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:107) 
    at org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService.java:190) 
    ... 60 more 
Caused by: com.google.common.util.concurrent.UncheckedTimeoutException: java.util.concurrent.TimeoutException 
    at com.google.common.util.concurrent.SimpleTimeLimiter.callWithTimeout(SimpleTimeLimiter.java:140) 
    at org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:80) 
    ... 61 more 
Caused by: java.util.concurrent.TimeoutException 
    at java.util.concurrent.FutureTask.get(FutureTask.java:205) 
    at com.google.common.util.concurrent.SimpleTimeLimiter.callWithTimeout(SimpleTimeLimiter.java:128) 
    ... 62 more 

Le pilote est initialisé comme suit:

 DesiredCapabilities capabilities = DesiredCapabilities.phantomjs(); 
     capabilities.setJavascriptEnabled(true); 

     PhantomJSDriverService service = new PhantomJSDriverService.Builder() 
       .usingPhantomJSExecutable(new File("/actemium/milter/acceptance-tests/driver/phantomjs/bin/phantomjs")) 
       .usingAnyFreePort() 
       .build(); 
// 
     driver = new PhantomJSDriver(service, capabilities); 

avec les dépendances données:

testCompile "com.codeborne:phantomjsdriver:1.4.3" 
phantomjs-1.9.8 

Et avec la configuration ci-gitlab ce qui suit:

acceptance-test: 
    stage: acceptance-test 
    services: 
    - jboss/keycloak:3.3.0.CR1 
    - postgres:latest 
    variables: 
    POSTGRES_DB: "..." 
    POSTGRES_USER: "..." 
    POSTGRES_PASSWORD: "..." 
    KEYCLOAK_PASSWORD: "..." 
    KEYCLOAK_USER: "..." 
    script: 
    - ls 
    - cd acceptance-tests/driver 
    - ls 
    - tar xf phantomjs-1.9.8-linux-x86_64.tar.bz2 
    - ls -al 
    - mv phantomjs-1.9.8-linux-x86_64 phantomjs 
    - ls 
    - ls phantomjs 
    #- ls -al phantomjs/bin 
    #- ln -s phantomjs/bin/phantomjs /usr/bin/phantomjs 
    - ls -al /actemium/milter/acceptance-tests/driver/phantomjs/bin/phantomjs 
    - cd ../.. 
    - ls 
    - pwd 
    - ./gradlew -g .gradle_home acceptanceTest -Dspring.profiles.active=at --stacktrace 
    artifacts: 
    when: on_failure 
    paths: 
     - acceptance-tests/tests/build/reports/tests 
    expire_in: 1 week 

Quelqu'un sait comment résoudre ce problème?

Répondre

1

Vous pouvez effectuer toutes les opérations à l'aide de l'interface sans tête via le navigateur chrome. N'utilisez pas HTMLUnit car il y a beaucoup de problèmes de configuration. PhamtomJS était une autre approche pour le navigateur sans tête, mais PhantomJs a un bug ces jours-ci en raison d'une mauvaise maintenance de celui-ci.

Vous pouvez utiliser le pilote chromé lui-même pour les tâches sans tête.

Vous avez juste besoin de passer une option dans chromedriver comme ci-dessous: -

chromeOptions.addArguments("--headless"); 

code complet apparaîtra comme ceci: -

System.setProperty("webdriver.chrome.driver","D:\\Workspace\\JmeterWebdriverProject\\src\\lib\\chromedriver.exe"); 
ChromeOptions chromeOptions = new ChromeOptions(); 
chromeOptions.addArguments("--headless"); 
chromeOptions.addArguments("--start-maximized"); 
WebDriver driver = new ChromeDriver(chromeOptions); 
driver.get("https://www.google.co.in/"); 

Si encore vous souhaitez utiliser PhantomJS. Puis d'abord télécharger le binaire PhantomJS en bas URL: -

http://phantomjs.org/download.html

Code complet sera comme ci-dessous: -

System.setProperty("phantomjs.binary.path","D:\\Workspace\\kumolus-test-automation\\src\\lib\\phantomjs\\phantomjs.exe"); 
DesiredCapabilities capabilities = null; 
ArrayList<String> cliArgsCap = new ArrayList<String>(); 
capabilities = DesiredCapabilities.phantomjs(); 
cliArgsCap.add("--web-security=false"); 
cliArgsCap.add("--ssl-protocol=any"); 
cliArgsCap.add("--ignore-ssl-errors=true"); 
capabilities.setCapability("takesScreenshot", true); 
capabilities.setJavascriptEnabled(true); 
capabilities.setCapability(
    PhantomJSDriverService.PHANTOMJS_CLI_ARGS, cliArgsCap); 
capabilities.setCapability(
    PhantomJSDriverService.PHANTOMJS_GHOSTDRIVER_CLI_ARGS, 
     new String[] { "--logLevel=2" }); 

WebDriver driver = new PhantomJSDriver(); 
driver.get("https://www.facebook.com/"); 
System.out.println(driver.getTitle()); 

Modifier l'emplacement du chemin de l'emplacement de PhantomJS en 1ère ligne de code ci-dessus

J'espère que cela va vous aider :)

+0

Je vais essayer. Ma solution pour PhantomJS était d'installer une dépendance cachée: yum installer -y libfontconfig1 fontconfig libfontconfig1-dev libfreetype6-dev. Mais préférez le chrome sans tête si possible;) –

2

Ma solution pour PhantomJS était d'installer un caché dépendance:

yum install -y libfontconfig1 fontconfig libfontconfig1-dev libfreetype6-dev