Utiliser Chrome Headless de Selenium / Java

Sumimasen tard

Ceci est l'article du 7ème jour du Calendrier de l'Avent du navigateur Chromium 2017.

Contexte

En reconfigurant mon test E2E, j'étais curieux de savoir comment utiliser le dernier Chrome Headless dans un environnement Java.

L'environnement est basé sur Mac, mais heureusement, Linux devrait fonctionner correctement.

L'article utilise la dernière version basée sur 2017/12. La dernière de la base d'aujourd'hui

est.

L'essentiel est que la version Java de ChromeWebDriver n'est plus prise en charge, du moins à ce stade, et avec le wrapper Selenide approprié pour votre langue, vous pouvez ignorer l'étape de téléchargement de chromedriver.

1. Utilisez Selenide (Selenium Java Wrapper).

Créez un fichier build.gradle comme celui ci-dessous et mettez la bibliothèque Selenide (selenide.org) dans un état utilisable.

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. Ecrivez le code d'exécution

Comment lancer Chrome via Selenium, dans ce cas, mettez-le dans une variable statique avant de charger la page.

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 {
        //Diffusez le journal vers Slf4j
        SLF4JBridgeHandler.removeHandlersForRootLogger();
        SLF4JBridgeHandler.install();

        //Utiliser ChromeDriver en mode sans tête
        Configuration.browser = WebDriverRunner.CHROME;
        Configuration.headless = true;
        Configuration.reportsFolder = "build/reports";
        Configuration.browserSize = "1024x768";
    }

    public static void main (final String...args) {
        // google.Prenez une capture d'écran de com et terminez
        open("https://google.com");
        screenshot("google.com");
    }
}

3. Exécuter

Tout d'abord, c'est un pilote qui devient un pont pour l'exécution de chrome, mais ʻio.github.bonigarcia.wdm.Downloader` le téléchargera pour ce qui suit.

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

Si vous faites ps -A lors de l'exécution de l'instruction principale, vous pouvez voir que Chrome est démarré avec --headless & --disable-gpu.

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:,

résultat

google.com.png

Résumé

Étant donné que Chrome Headless ne peut pas être utilisé, PhantomJS, etc., il existe diverses restrictions, je pense donc qu'il existe de nombreux environnements dans lesquels Chrome a été lancé via xvid.

À partir de 2017, il semble que vous devriez utiliser Chrome Headless sans xvid.

Autres informations testées avec Chrome Headless

Recommended Posts

Utiliser Chrome Headless de Selenium / Java
Utiliser le type de données PostgreSQL (jsonb) à partir de Java
Sélénium x Java
[Java] Utilisez Collectors.collectingAndThen
Utiliser les bibliothèques natives de Scala via Java CPP + Java
Capture et sauvegarde de l'installation de sélénium en Java
Utilisez Matplotlib depuis Java ou Scala avec Matplotlib4j
Appeler Java depuis JRuby
Accédez à API.AI depuis Java
Utiliser OpenCV avec Java
De Java à Ruby !!
Utilisez TensorFlow de JRuby
JAWJAW est pratique si vous utilisez WordNet à partir de Java
Utiliser PreparedStatement en Java
Utiliser des couches Lambda avec Java
Migration de Cobol vers JAVA
[Java] Comment utiliser Map
Java à partir du débutant, remplacer
Comment utiliser java Facultatif
Nouvelles fonctionnalités de Java7 à Java8
Comment utiliser la classe Java
Connectez-vous de Java à PostgreSQL
[Java] Comment utiliser removeAll ()
Comment utiliser Java Map
Java, instance à partir du débutant
[Java] Utilisez correctement Big Decimal ~ 2018 ~
[java] Raisons d'utiliser statique
Java à partir de débutant, héritage
La vie Java à partir de zéro
Comment utiliser les variables Java
Application Java CICS-Run - (5) Utiliser JCICSX
Utilisation de Docker depuis Java Gradle
Utiliser SpatiaLite avec Java / JDBC
De Java inefficace à Java efficace
JavaScript vu de Java
Formulaire de réservation d'échantillons de sélénium (Java)
Exécuter des instructions non-Java à partir de Java