Verwenden Sie Chrome Headless von Selenium / Java

Sumimasen spät

Dies ist der Artikel zum 7. Tag von Chromium Browser Adventskalender 2017.

Hintergrund

Als ich meinen E2E-Test neu konfigurierte, war ich neugierig, wie ich das neueste Chrome Headless in einer Java-Umgebung verwenden kann.

Die Umgebung basiert auf Mac, aber zum Glück sollte Linux gut funktionieren.

Der Artikel verwendet die neueste Version basierend auf 2017/12. Das Neueste der heutigen Basis

ist.

Unter dem Strich wird die Java-Version von ChromeWebDriver zumindest vorerst nicht mehr unterstützt. Mit dem für Ihre Sprache geeigneten Selenide-Wrapper können Sie den Schritt zum Herunterladen von chromedriver überspringen.

1. Verwenden Sie Selenide (Selenium Java Wrapper).

Erstellen Sie eine build.gradle-Datei wie die folgende und bringen Sie die Bibliothek Selenide (selenide.org) in einen verwendbaren Zustand.

build.gradle


apply plugin: 'idea'
apply plugin: 'java'

repositories {
    mavenCentral();
}

sourceCompatibility = targetCompatibility = 1.8

dependencies {
    compile 'com.codeborne:selenide:4.9'
    compile 'org.springframework.boot:spring-boot-starter-logging:1.5.9.RELEASE'
}

configurations.all {
    exclude group: 'log4j'
    exclude module: 'log4j-over-slf4j'
    exclude module: 'slf4j-log4j12'
    exclude module: 'slf4j-jdk14'
    exclude module: 'commons-logging'
}

2. Schreiben Sie den Ausführungscode

So starten Sie Chrome über Selen In diesem Fall fügen Sie es vor dem Laden der Seite in eine statische Variable ein.

ChromeHeadlessApplication.java


package holdings.ozaki.matsudak;

import static com.codeborne.selenide.Selenide.open;
import static com.codeborne.selenide.Selenide.screenshot;

import org.slf4j.bridge.SLF4JBridgeHandler;

import com.codeborne.selenide.Configuration;
import com.codeborne.selenide.WebDriverRunner;


public class ChromeHeadlessApplication {
    static {
        //Streame das Protokoll in Richtung Slf4j
        SLF4JBridgeHandler.removeHandlersForRootLogger();
        SLF4JBridgeHandler.install();

        //Verwenden Sie ChromeDriver im Headless-Modus
        Configuration.browser = WebDriverRunner.CHROME;
        Configuration.headless = true;
        Configuration.reportsFolder = "build/reports";
        Configuration.browserSize = "1024x768";
    }

    public static void main (final String...args) {
        // google.Machen Sie einen Screenshot von com und beenden Sie
        open("https://google.com");
        screenshot("google.com");
    }
}

3. Führen Sie aus

Zunächst ist es ein Treiber, der als Brücke zum Ausführen von Chrome fungiert, aber "io.github.bonigarcia.wdm.Downloader" lädt ihn für die folgenden Zwecke herunter.

log


2017-12-24 20:13:55 [main] INFO  i.g.bonigarcia.wdm.BrowserManager - Reading https://chromedriver.storage.googleapis.com/ to seek [chromedriver]
2017-12-24 20:13:55 [main] INFO  i.g.bonigarcia.wdm.BrowserManager - Latest version of [chromedriver] is 2.34
2017-12-24 20:13:55 [main] DEBUG io.github.bonigarcia.wdm.Downloader - Downloading https://chromedriver.storage.googleapis.com/2.34/chromedriver_mac64.zip to /Users/jp20217/.m2/repository/webdriver/chromedriver/mac64/2.34/chromedriver_mac64.zip
2017-12-24 20:13:56 [main] INFO  i.g.bonigarcia.wdm.BrowserManager - Exporting webdriver.chrome.driver as /Users/matsudak/.m2/repository/webdriver/chromedriver/mac64/2.34/chromedriver

Wenn Sie ps -A ausführen, während Sie die Hauptanweisung ausführen, können Sie sehen, dass Chrome mit --headless & --disable-gpu gestartet wird.

ps -A


50321 ??         0:00.30 /Applications/Google Chrome.app/Contents/MacOS/Google Chrome --disable-background-networking --disable-client-side-phishing-detection --disable-default-apps --disable-gpu --disable-hang-monitor --disable-popup-blocking --disable-prompt-on-repost --disable-sync --disable-web-resources --enable-automation --enable-logging --force-fieldtri
als=SiteIsolationExtensions/Control --headless --ignore-certificate-errors --load-extension=/var/folders/wn/s9lbdlj56rd4bl2b6k54v_z80000gp/T/.org.chromium.Chromium.hg9Dpt/internal --log-level=0 --metrics-recording-only --no-first-run --no-sandbox --password-store=basic --remote-debugging-port=12986 --test-type=webdriver --use-mock-keychain --user-data-dir=/var/
folders/wn/s9lbdlj56rd4bl2b6k54v_z80000gp/T/.org.chromium.Chromium.76jzQ6 data:,

Ergebnis

google.com.png

Zusammenfassung

Da Chrome Headless nicht verwendet werden kann, gelten für PhantomJS usw. verschiedene Einschränkungen. Ich denke, dass es viele Umgebungen gibt, in denen Chrome über xvid gestartet wurde.

Ab 2017 sollten Sie Chrome Headless ohne xvid verwenden.

Weitere Informationen, die mit Chrome Headless getestet wurden

Recommended Posts

Verwenden Sie Chrome Headless von Selenium / Java
Verwenden Sie den PostgreSQL-Datentyp (jsonb) aus Java
Selen x Java
[Java] Verwenden Sie Collectors.collectingAndThen
Verwenden Sie native Bibliotheken von Scala über Java CPP + Java
Erfassen und speichern Sie die Selen-Installation in Java
Verwenden Sie Matplotlib aus Java oder Scala mit Matplotlib4j
Rufen Sie Java von JRuby aus auf
Greifen Sie über Java auf API.AI zu
Verwenden Sie OpenCV mit Java
Von Java zu Ruby !!
Verwenden Sie TensorFlow von JRuby
JAWJAW ist praktisch, wenn Sie WordNet aus Java verwenden
Verwenden Sie PreparedStatement in Java
Verwenden Sie Lambda-Ebenen mit Java
Migration von Cobol nach JAVA
[Java] Verwendung von Map
Java ab Anfänger überschreiben
Verwendung von Java Optional
Neue Funktionen von Java7 bis Java8
Verwendung der Java-Klasse
Stellen Sie eine Verbindung von Java zu PostgreSQL her
[Java] Verwendung von removeAll ()
Verwendung von Java Map
Java, Instanz für Anfänger
[Java] Big Decimal richtig verwenden ~ 2018 ~
[Java] Gründe für die Verwendung von statischen
Java ab Anfänger, Vererbung
Java-Leben von vorne anfangen
Verwendung von Java-Variablen
CICS-Java-Anwendung ausführen- (5) Verwenden Sie JCICSX
Verwenden von Docker von Java Gradle
Verwenden Sie SpatiaLite mit Java / JDBC
Von ineffektivem Java zu effektivem Java
JavaScript von Java aus gesehen
Selenium Musterbuchungsformular (Java)
Führen Sie Nicht-Java-Anweisungen von Java aus