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