Testing 在不使用xvfb的情况下运行Selenium headless

Testing 在不使用xvfb的情况下运行Selenium headless,testing,selenium,headless,Testing,Selenium,Headless,我正在尝试运行Selenium headless(不显示浏览器)。其他问题指出,xvfb是实现这一点的工具。然而,它看起来非常不稳定,总是崩溃,所以我正在寻找另一种选择 有没有一种非xvfb的无头运行Selenium的方法?我很惊讶。我已经多次使用Selenium和Xvfb,没有任何问题,许多其他用户也在这样做。您能否更具体地说明您的设置和面临的问题?如何启动Xvfb?能否提供xvfb.log 但是,为了回答您的问题,可以使用X VNC服务器。有关一些说明,请参见示例。如果没有关于配置的任何详细

我正在尝试运行Selenium headless(不显示浏览器)。其他问题指出,
xvfb
是实现这一点的工具。然而,它看起来非常不稳定,总是崩溃,所以我正在寻找另一种选择


有没有一种非xvfb的无头运行Selenium的方法?

我很惊讶。我已经多次使用Selenium和Xvfb,没有任何问题,许多其他用户也在这样做。您能否更具体地说明您的设置和面临的问题?如何启动Xvfb?能否提供
xvfb.log


但是,为了回答您的问题,可以使用X VNC服务器。有关一些说明,请参见示例。如果没有关于配置的任何详细信息,实际上很难做到更精确。

我认为如果不运行X服务器,就无法运行浏览器

如果您不喜欢Xvfb,那么正如Pascal所说,您最好的选择可能是运行VNC服务器——我个人喜欢。这意味着您正在运行一个(无头)X服务器,您可以随时使用VNC,以防出现问题,您需要查看它。我总是有一个VNC服务器在运行,我使用$DISPLAY环境变量运行测试,该变量指向该服务器

(有人对我投了反对票,所以也许我应该澄清一下:像XtighVNC这样的X11 VNC服务器与Windows或OS X上的普通VNC服务器不同,它们只会在网络上共享您现有的屏幕。不要混淆。;-)

运行chrome browser with--headless,它还允许您减少资源使用。使用 ChromeOptions.addArguments(“--headless”,“窗口大小=1024768”,“--no sandbox”) 为了实现它。此方案假设安装了Chrome浏览器和Chromedriver

下面是我在Jenkins工作中使用的简单Selenium java测试

    package com.gmail.email;

import java.util.concurrent.TimeUnit;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

public class FirstTest {
    private static ChromeDriver driver;
    WebElement element;

    @BeforeClass
    public static void openBrowser(){

        ChromeOptions ChromeOptions = new ChromeOptions();
        ChromeOptions.addArguments("--headless", "window-size=1024,768", "--no-sandbox");
        driver = new ChromeDriver(ChromeOptions);
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    }

    @Test // Marking this method as part of the test
    public void gotoHelloWorldPage() {
        // Go to the Hello World home page
        driver.get("http://webapp:8080/helloworld/");

        // Get text from heading of the Hello World page
        String header = driver.findElement(By.tagName("h2")).getText();
        // Verify that header equals "Hello World!"
        Assert.assertEquals(header, "Hello World!");

    }

    @AfterClass
    public static void closeBrowser(){
        driver.quit();
    }
}
这里有更多细节

我想xvfb的问题是:。xvfb总是感觉像一个奇怪的解决方案,所以我一直在寻找另一种方法(尽管VNC的感觉是一样的:-/)。谢谢。如果你发现了问题,那么我想你找到了解决办法,不是吗?我想是的。我申请修理,它看起来不错,但还是坏了。看起来是个问题。答案很好——特别是因为RHEL似乎不再在yum存储库中使用Xvfb了。然而,tigervnc在那里。所以我想说,这是一个官方支持得多的解决方案,然而谷歌似乎让你首先想到了xvfb……很酷,但一些用户可能对如何使用它感到困惑。你能补充一些例子吗?类似于:运行
$vncserver
,检查输出索引
新的“X”桌面是主机:1
,然后使用它运行命令,例如xcalc
$DISPLAY=:1 xcalc
。您还可以看到显示的内容:
$vncviewer localhost:59XX