2017-09-06 79 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 
相关问题