Запуск Selenium без головы без использования xvfb

Я пытаюсь запустить Selenium без головы (без появления браузера). Другие вопросы указали на xvfb как инструмент для этого. Тем не менее, он кажется очень нестабильным, все время сбой, поэтому я ищу другую альтернативу.

есть ли не-xvfb способ запуска Селена без головы?

3 ответов


Я не думаю, что вы сможете запустить браузер без запуска X-сервера.

Если вам не нравится Xvfb, то, как сказал Паскаль, лучше всего запустить сервер VNC - мне лично нравится Xtightvnc. Это означает, что вы используете (безголовый) X-сервер, на который вы можете VNC в любое время, если что-то пойдет не так, и вы хотите посмотреть на него. У меня всегда работает сервер VNC, и я запускаю свои тесты с переменной среды $DISPLAY, указывающей на это сервер.

(кто-то меня понизил, поэтому, возможно, я должен уточнить: X11 VNC-серверы, такие как Xtightvnc, не такие же, как обычные VNC-серверы в Windows или OS X, которые просто разделяют ваш существующий экран в сети. Не путать. ; -))


Я удивлен. Я использовал Selenium и Xvfb несколько раз без каких-либо проблем, и многие другие пользователи делают это тоже. Можете ли вы быть более конкретным о вашей настройке и проблемах, с которыми вы сталкиваетесь? Как вы начинаете Xvfb? Можете ли вы предоставить xvfb.log?

однако, чтобы ответить на ваш вопрос, можно использовать сервер X VNC. См., например,на этой странице для некоторых инструкций. Это на самом деле трудно быть более точным без каких-либо деталей о вашем конфигурация.


Запустите браузер chrome с --headless, также он позволяет уменьшить использование ресурсов.Использовать ChromeOptions.addArguments("--без головы", окна-размер "=1024,768", "... нет-песочница") добиться этого. Эта схема предполагает установку браузера Chrome и Chromedriver.

вот мой простой тест Selenium java, который используется в моей работе Jenkins

    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();
    }
}

подробнее здесь https://github.com/SeleniumHQ/docker-selenium/issues/429