当前位置: 首页 > 知识库问答 >
问题:

在linux服务器上运行Selenium WebDriver测试

阎卓
2023-03-14

我正在尝试在一个使用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或我需要一些额外的配置?

共有2个答案

杨豪
2023-03-14

这里错误日志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());
        }

汪凌
2023-03-14

我用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)。 在服务器上将它推送到后台是正确的方法吗?我相信必须