Запуск 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