在我们的项目中,决定使用ui-tests作为单元测试。为此我们写了几个测试。他们都使用一个端口。在运行测试之前,我从命令行执行命令(通过CI):nohup Xvfb :2 -screen 0 1920x1080x24 & chromedriver --whitelisted-ips --port = 60000
(当然,DISPLAY和PATH在同一会话中设置)。
如果测试后浏览器没有关闭,它可以正常工作。但我们不能这样做。每次测试后必须关闭。如果我这样做:
} finally {
browser.quit();
}
第一次测试没问题。但在此之后,我们有挂起进程chromedriver
,并使用了端口60000(那些,我无法运行监听器:chromedriver --whitelisted-ips --port = 60000
等等)。接下来的测试失败了:
DEBUG org.apache.http.wire - << "{"sessionId":"be69384516355ddaefd5951a10fa3f82","status":13,"value":{"message":"unknown error: Chrome failed to start: exited abnormally\n (Driver info: chromedriver=2.28.455506 (18f6627e265f442aeec9b6661a49fe819aeeea1f),platform=Linux 3.13.0-45-generic x86_64)"}}"
[main] DEBUG org.apache.http.impl.conn.DefaultClientConnection - Connection 0.0.0.0:34493<->127.0.0.1:60000 shut down
[main] DEBUG org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager - Released connection is not reusable.
[main] DEBUG org.apache.http.impl.conn.tsccm.ConnPoolByRoute - Releasing connection [{}->http://localhost:60000][null]
[main] DEBUG org.apache.http.impl.conn.DefaultClientConnection - Connection 0.0.0.0:34493<->127.0.0.1:60000 closed
[main] DEBUG org.apache.http.impl.conn.tsccm.ConnPoolByRoute - Notifying no-one, there are no waiting threads
...
org.openqa.selenium.WebDriverException: unknown error: Chrome failed to start: exited abnormally
(Driver info: chromedriver=2.28.455506 (18f6627e265f442aeec9b6661a49fe819aeeea1f),platform=Linux 3.13.0-45-generic x86_64) (WARNING: The server did not provide any stacktrace information); duration or timeout: 60.03 seconds
Build info: version: '2.10.0', revision: '14416', time: '2011-10-27 23:00:15'
ystem info: os.name: 'Linux', os.arch: 'amd64', os.version: '3.13.0-45-generic', java.version: '1.6.0'
Driver info: driver.version: ChromeDriver
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:56)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:39)
at java.lang.reflect.Constructor.newInstance(Constructor.java:527)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:147)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:113)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:417)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:115)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:76)
at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:120)
at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:98)
at ru.blogic.lecm.plugin.base.test.executor.DOHTestUIExecutor.execute(DOHTestUIExecutor.java:74)
at ru.blogic.lecm.plugin.base.test.executor.DOHTestExecutor.testUI(DOHTestExecutor.java:78)
at ru.blogic.lecm.plugin.base.test.executor.DOHTestExecutor.test(DOHTestExecutor.java:65)
at ru.blogic.lecm.plugin.base.test.examples.DOHDemoNoUITest.testUtils(DOHDemoNoUITest.java:20)
我尝试在测试开始时从java代码运行监听器,如下所示:
Runtime.getRuntime().exec("export DISPLAY=:2 & export PATH=$PATH:/usr/lib/chromium-browser/ & nohup Xvfb :2 -screen 0 1920x1080x24 & chromedriver --whitelisted-ips --port=60000");
并且在最后一个块中我几乎试图杀死进程:
Runtime.getRuntime().exec("pkill chromedriver");
但没有改变。