我正在尝试在一个使用chrome的Linux服务器上运行一个使用selenium webdriver实现的测试,并且不显示我的java代码
System.setProperty("webdriver.chrome.driver","/home/exploit/Bureau/chromedriver");
WebDriver driver = new ChromeDriver();
driver.get("https://www.google.com");
WebElement element = driver .findElement(By.id("lst-ib"));
要运行此程序(jar),请使用以下命令启动Xvfb
Xvfb :1 -screen 5 1024x768x8 &
export DISPLAY=:1.5
当我运行程序时,经过一段长时间的等待,我得到了这个异常
12:39:53.483 [Forwarding newSession on session null to remote] DEBUG o.a.h.i.conn.DefaultClientConnection - Connection 0.0.0.0:51411<->127.0.0.1:9069 closed
12:39:53.483 [Forwarding newSession on session null to remote] DEBUG o.a.h.i.conn.tsccm.ConnPoolByRoute - Notifying no-one, there are no waiting threads
Exception in thread "main" org.openqa.selenium.WebDriverException: unknown error: Chrome failed to start: exited abnormally
(Driver info: chromedriver=2.9.248304,platform=Linux 3.10.0-123.13.2.el7.x86_64 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 60.69 seconds
Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '3.10.0- 123.13.2.el7.x86_64', java.version: '1.7.0_79'
Driver info: driver.version: ChromeDriver
Session ID: 6c811fab5c809544094e1f9e1d96ef6a
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:188)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:531)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:215)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:110)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:114)
at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:161)
at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:107)
at com.atos.esope.Extractor.extTest(Extractor.java:76)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:201)
at com.sun.proxy.$Proxy27.extTest(Unknown Source)
at com.atos.esope.Program.main(Program.java:32)
当我尝试单独运行chrome时,a遇到了这个问题
Xlib: extension "RANDR" missing on display ":1.5".
Xlib: extension "RANDR" missing on display ":1.5".
Xlib: extension "RANDR" missing on display ":1.5".
Xlib: extension "RANDR" missing on display ":1.5".
Xlib: extension "RANDR" missing on display ":1.5".
Xlib: extension "RANDR" missing on display ":1.5".
Xlib: extension "RANDR" missing on display ":1.5".
[3207:3207:0505/171255:ERROR:url_pattern_set.cc(240)] Invalid url pattern: chrome://print/*
libGL error: failed to load driver: swrast
libGL error: Try again with LIBGL_DEBUG=verbose for more details.
libGL error: failed to load driver: swrast
libGL error: Try again with LIBGL_DEBUG=verbose for more details.
libGL error: failed to load driver: swrast
libGL error: Try again with LIBGL_DEBUG=verbose for more details.
libGL error: failed to load driver: swrast
libGL error: Try again with LIBGL_DEBUG=verbose for more details.
libGL error: failed to load driver: swrast
libGL error: Try again with LIBGL_DEBUG=verbose for more details.
libGL error: failed to load driver: swrast
libGL error: Try again with LIBGL_DEBUG=verbose for more details.
问题是:
是在定位驱动程序的问题还是在chrome或我需要一些额外的配置?
这里错误日志Chrome无法启动:异常退出
清楚地表明系统无法启动chrome驱动程序,但它能够找到它。当您尝试使用jenkins在linux服务器上运行时,只需尝试下载并启用jenkins上的插件XVFB并使用此代码块。希望这能有所帮助!
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());
}
我用Firefox试过了。您需要引导Firefox,使其在Xvfb中执行。
您可以尝试以下操作:
String Xport = System.getProperty("lmportal.xvfb.id", ":1");
final File firefoxPath = new File(System.getProperty("lmportal.deploy.firefox.path", "/usr/bin/firefox"));
FirefoxBinary firefoxBinary = new FirefoxBinary(firefoxPath);
firefoxBinary.setEnvironmentProperty("DISPLAY", Xport);
问题内容: 我需要将Silverlight 2.0应用程序部署到Apache服务器,但是它在Linux下。 这可能吗?我的意思是,我是否需要在服务器中安装.Net 3.5和可以执行Asp.Net的网站? 谢谢您的帮助… 问题答案: 如果apache服务器只是在没有任何ASPX页面的情况下提供Silverlight应用程序,那么您应该没问题。Silverlight是一种客户端技术,因此它在服务器上不
问题内容: 对于具有Java背景的开发人员,我也有兴趣探索使用ASP.NET工具/平台进行软件开发。 Java Web应用程序(.jsp和servlet)可以在许多服务器平台上运行。 问题 :.NET Web应用程序能否在基于Linux的服务器上运行?考虑到无法使用Windows服务器托管Web应用程序的情况。 问题答案: 这取决于您使用的是哪种特定的.NET技术。该Mono项目提供运行ASP.N
问题内容: 我在CI和CD上创建了Jenkinsfile,Dockerfile,Dockerfile.test到CI和CD,在GitHub上构建了我的服务器API,我在Jenkins上构建了该构建,并且构建成功,并且我的docker在Jenkinsfile阶段也在容器上运行,我创建了用于测试和部署在服务器API上,并使用docker作为容器 我也使用docker-compose在docker上运行
我是Selenium的新手,遇到了一些问题。 我正在使用与Selenium连接的WebDriverManager。这是我的代码: 当我在本地系统(Windows 10操作系统)上运行代码时,一切都运行得非常好。当我在我们的Linux服务器(Ubuntu 18.04、Tomcat 9)上作为Web应用程序运行我的代码时,我得到以下异常: 我使用的是Selenium 4.2.1和Webdriver 5
我在Linux服务器上用chrome驱动程序版本74运行Selenium时遇到了异常(如下)。它在Windows上运行得很好 未知错误:Chrome启动失败:异常退出(未知错误:DevToolsActivePort文件不存在)(从Chrome位置/usr/bin/google-Chrome启动的进程不再运行,因此ChromeDriver假设Chrome已崩溃。) 我可以通过在ChromeOptio
问题内容: 我需要每天在特定时间在Linux服务器上运行一段Java代码。 目前,我正在Ubuntu桌面上对其进行测试,方法是从终端运行它,并按要求正常运行。为了进行调度,我从这里开始使用库。 在实际服务器上,将其作为进程运行的正确方法是什么? 我的意思是,在桌面上,我从终端运行指定接近当前时间的代码,第一次对其进行测试,然后将其停止(^ Z)。 在服务器上将它推送到后台是正确的方法吗?我相信必须