首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Jenkins服务器中作为作业运行Selenium代码时,selenium代码无法打开firefox浏览器

在Jenkins服务器中作为作业运行Selenium代码时,selenium代码无法打开firefox浏览器
EN

Stack Overflow用户
提问于 2020-08-20 16:54:11
回答 3查看 619关注 0票数 3

我在Selenium/Java测试类中有以下代码。现在,这段代码我已经推送到了GitHub。此外,我还设置了Jenkins作业来执行相同的代码(在Jenkins作业中,我将代码指向GitHub)。Jenkins作业触发正常并开始执行测试,但在打开浏览器时抛出以下错误。测试用例应该打开Firefox浏览器,但是Firefox浏览器没有打开。

所以,我的问题是,如果我想在Jenkins作业中执行测试用例(Jenkins服务器在Cento7.4OS上运行),下面的selenium代码是否正确。

注意:在同一个CentOS VM中,我能够在eclipse中执行相同的selenium代码(如下所示),并且它能够打开Firefox浏览器并打开URL,没有任何问题。只有当我尝试在Jenkins服务器中运行与Jenkins作业相同的代码时,问题才会出现。

Selenium代码

代码语言:javascript
代码运行次数:0
运行
复制
System.setProperty("webdriver.gecko.driver",  "geckodriver");
FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.addArguments("--display=0");
    
WebDriver driver = new FirefoxDriver(firefoxOptions);
driver.get("https://www.facebook.com");

Jenkins作业输出

代码语言:javascript
代码运行次数:0
运行
复制
Running TestSuite

Failed to open connection to "session" message bus: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
1597912923234   mozrunner::runner   INFO    Running command: "/bin/firefox" "-marionette" "--display=0" "-foreground" "-no-remote" "-profile" "/tmp/rust_mozprofileFz0Zr2"
Failed to open connection to "session" message bus: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
Running without a11y support!
Error: cannot open display: 0
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.972 sec <<< FAILURE!

Results :

Failed tests:   loginTest4(com.training.browsers.LinuxTest): invalid argument: can't kill an exited process

Tests run: 1, Failures: 1, Errors: 0, Skipped: 0

[ERROR] There are test failures.

xauth list输出

代码语言:javascript
代码运行次数:0
运行
复制
[root@localhost ~]# xauth list
localhost.localdomain/unix:0  MIT-MAGIC-COOKIE-1  4eb74af687f2dbc022ef03617614456e
#ffff#6c6f63616c686f73742e6c6f63616c646f6d61696e#:0  MIT-MAGIC-COOKIE-1  4eb74af687f2dbc022ef03617614456e
EN

回答 3

Stack Overflow用户

发布于 2020-11-10 12:33:34

您可能想研究一下如何设置xvfb (https://centos.pkgs.org/7/centos-x86_64/xorg-x11-server-Xvfb-1.20.4-10.el7.x86_64.rpm.html)。问题是您的Jenkins服务器无法打开display 0来运行。请注意,发送到firefox二进制文件的参数在firefoxOptions中指定display 0,与二进制文件执行的信息日志行匹配。假设你正在运行一个无头服务器,这就是为什么你会得到这个错误。在本地运行时情况并非如此。使用xvfb,您应该能够指定屏幕编号并相应地设置您的配置,或者简单地使用xvfb-run。

票数 2
EN

Stack Overflow用户

发布于 2020-11-10 17:35:03

测试用例应该打开火狐浏览器,但是火狐浏览器没有打开。

要解决此问题,请使用WebDriverManager自动管理驱动程序(例如chromedriver、geckodriver等)。Selenium WebDriver需要。

要在Maven项目中使用WebDriverManager,请在pom.xml中添加以下依赖项(需要Java8或更高版本)。

代码语言:javascript
代码运行次数:0
运行
复制
<dependency>
    <groupId>io.github.bonigarcia</groupId>
    <artifactId>webdrivermanager</artifactId>
    <version>4.2.2</version>
</dependency>

然后,只需在代码中添加WebDriverManager.firefoxdriver().setup();,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import io.github.bonigarcia.wdm.WebDriverManager;

WebDriverManager.firefoxdriver().setup();

FirefoxOptions firefoxOptions = new FirefoxOptions();  
firefoxOptions.addArguments("--display=0");
WebDriver driver = new FirefoxDriver(options);

查看使用WebDriverManager here在火狐和Chrome上运行JUnit 4测试的基本示例。

票数 1
EN

Stack Overflow用户

发布于 2020-11-10 22:23:06

--display=n

短语display用于指代共享公共键盘和指针的监视器的集合,例如鼠标、平板电脑等。大多数工作站往往只有一个键盘,因此也就只有一个显示器。多用户系统通常具有多个显示器,当用于该显示器的X服务器启动时,机器上的每个显示器都会被分配一个显示编号(从0开始)。display:0通常是本地显示器,即计算机的主显示器。

使用Jenkins

当Jenkins执行批处理文件时,Jenkins slave会在后台为它启动的每个程序运行服务。因此,通常情况下,您无法看到Firefox浏览器启动,但在任务管理器中,您可以看到Jenkins在后台打开几个Firefox进程。

解决方案

有几种方法可以解决这个问题,如下所示:

如果您使用Jenkins作为windows服务,则需要允许服务与桌面交互。步骤:

windows服务中的

  • 选择Jenkins的服务:

  • 打开Jenkins服务的属性窗口-> Logon->启用复选框Logon

在这种方法中,的自动启动在X11会话下工作,否则将被禁用,因为不同的应用程序无法建立dbus守护进程的公共实例。

您可以在Jenkins : Selenium GUI tests are not visible on Windows中找到相关的详细讨论

另一种方法是在命令提示符下以java -jar jenkins.war身份运行Jenkins,而不是windows installer版本。

另一种方法是使用RemoteWebDriver。在Jenkins中,确保有一台机器可以运行selenium测试。在此服务器上,您可以启动firefox浏览器。

您可以在How to launch chrome browser from Jenkins directly instead of using code in eclipse中找到相关的详细讨论

另一种方法是通过FirefoxOptions()类的实例将setHeadless设置为true来调用firefox-headless浏览器,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
FirefoxOptions options = new FirefoxOptions();
options.setHeadless(true);
WebDriver driver = new FirefoxDriver(options);
driver.get("https://www.google.com/");

您可以在How to make Firefox headless programmatically in Selenium with Python?中找到相关的详细讨论

无效参数:无法终止已退出的进程

在以下两种情况下,通常会观察到此错误:

当您以超级用户/管理员用户身份执行测试时使用

  • 。建议以非超级用户/非管理员用户身份执行测试。当您使用的二进制文件版本不兼容时,请使用

您可以在WebDriverException: Message: invalid argument: can't kill an exited process with GeckoDriver, Selenium and Python on RaspberryPi3

中找到详细的讨论

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63501595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档