2017-09-06 87 views
2

我有一個帶驗收測試(即concordion測試)的Java項目的設置。 本地使用chrome和phantomjs驅動程序(在Windows上)測試正在通過(即通過gradle運行)。Openshift - gitlab-cli - phantomjs - WebDriverException:超時等待驅動程序服務器啓動

上gitlab-CI運行時(在openshift亞軍),我得到以下異常:

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 

的驅動程序初始化如下:

 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); 

與給定的依賴關係:

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

並與以下gitlab-ci配置:

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 

任何人都知道如何解決這個問題?

回答

1

您可以使用chrome瀏覽器使用無頭執行所有操作。不要使用HTMLUnit,因爲它有許多配置問題。

PhamtomJS是另一種無頭瀏覽器的方法,但PhantomJs最近因缺乏維護而存在bug。

您可以使用chromedriver本身作爲無頭工作。

你只需要在chromedriver下面通過一個選項: -

chromeOptions.addArguments("--headless"); 

的完整代碼會出現這樣的: -

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/"); 

如果你仍然想使用phantomjs。 然後首先從以下網址下載phantomjs二進制: -

http://phantomjs.org/download.html

完整代碼就會像下面: -

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()); 

變化phantomjs位置路徑的位置在上面的代碼中的第1行

希望它能幫助你:)

+0

我會盡力的。我對PhantomJS的解決方案是安裝隱藏的依賴項:yum install -y libfontconfig1 fontconfig libfontconfig1-dev libfreetype6-dev。但如果可能的話,更喜歡無頭鍍鉻;) –

2

我對PhantomJS的解決方案是安裝隱藏依賴關係:

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