Selenium WebDriver ustawienie drivera

Selenium

 620 

Selenium WebDriver ustawienie drivera to wpis pokazujący w jaki sposób w różnych językach zaimportować drivera do naszego testu. Jeżeli masz już wiedzę na temat jakiegoś języka programowania, oraz zainstalowane IDE zapewne sposób inicjalizacji driverów będzie dla Ciebie przydatny.

Pierwsze sugestie

Na samym początku koniecznym jest byś pobrał właściwego drivera. Gdy już będziesz mieć właściwego drivera, oraz wybrane IDE i język programowania to czas będzie przejść do jego importu. Oczywiście jest to jedna z metod wywoływania drivera. My skupimy się głównie na języku Java. Przy ustawianiu swojego drivera, pamiętaj o właściwym wskazaniu ścieżki dla systemu operacyjnego:

a) Windows – np. C:\MiejsceTwojegoDrivera\
b) Linux i MacOS – /MiejsceTwojegoDrivera/

Chrome:

Jest to najpopularniejszy driver dla Selenium. Jego popularność wynika w głównej mierze z popularności przeglądarki Google Chrome oraz ilości poradników czy informacji.

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
WebDriver driver = new ChromeDriver();

System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");

Chromedriver w ustawieniach posiada możliwości wielu ustawień. Pierwszą i podstawową opcją jest możliwość maksymalizowania okna przeglądarki, czy też ustawienia żądanej rozdzielczości.

ChromeOptions options = new ChromeOptions()
options.addArgument("start-maximized");
options.addArgument("--window-size=1920,1080");
ChromeDriver driver = new ChromeDriver(options);

Możesz dodać tryb incognito dla swoich ustawień.

ChromeOptions options = new ChromeOptions();
options.addArguments("--incognito");

Jeżeli chcesz, Chrome posiada tryb headless

ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");

Symulowanie urządzeń mobilnych. W opcjach musisz dodać opcje emulacji.

options.add_emulation(device_name: 'iPhone 6')
options.add_emulation(device_metrics: {width: 400, height: 800, pixelRatio: 1, touch: true})

Rozszerzenie powyższych ustawień w języku Java.

Map<String, String> mobileEmulation = new HashMap<>();
mobileEmulation.put("deviceName", "iPhone 6");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setExperimentalOption("mobileEmulation", mobileEmulation);
WebDriver driver = new ChromeDriver(chromeOptions);

Ustawienie binarium.

ChromeOptions options = new ChromeOptions();
options.setBinary("/path/to/other/chrome/binary");

Firefox:

Podobnie jak w Chromie, tak samo i w Firefoxie importujemy przeglądarkę do testu. Wskazujemy też ścieżkę do drivera.

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.Firefox.FirefoxDriver;
WebDriver driver = new FirefoxDriver();

System.setProperty("webdriver.gecko.driver", "/path/to/geckodriver");

Pozostałe opcje inicjalizujemy bardzo podobnie jak w Chromie, tylko ustawienia są po wywołaniu FirefoxOptions. Inaczej wygląda kwestia dodawania rozszerzeń, jednak to będzie przedmiotem innego wpisu z dokładnym wyjaśnieniem.

FirefoxOptions options = new FirefoxOptions();
options.setBinary("/usr/bin/firefox");
options.addArguments("--headless");
driver = new FirefoxDriver(options);
driver.manage().window().maximize();
driver.set_window_size(1080,800)

Edge:

Kolejna z opcji dla Selenium WebDriver – czyli wykorzystanie drivera dla przeglądarki Edge. Jeżeli chcesz testować z użyciem Edge to pamiętaj by mieć pobrany plik binarny odpowiadający wersji dla Twojego systemu Windows. Na stronie Edge Developers są wszystkie dostępne pliki binarne.  Jeśli chcesz przeprowadzić testy na MS Edge, ale nie masz systemu Windows 10, to Microsoft oferuje bezpłatne maszyny wirtualne dla testerów na wskazanej wyżej witrynie.

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;

WebDriver driver = new EdgeDriver();

System.setProperty("webdriver.edge.driver", "C:/path/to/MicrosoftWebDriver.exe");

Opera:

Według statystyk w naszym rejonie przeglądarka dość mocno używana przez internautów. Jeżeli Twoja firma wspiera korzystanie przez użytkowników, spróbuj odpalić drivera u siebie.

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.opera.OperaDriver;

WebDriver driver = new OperaDriver();

Dla skorzystania z różnych opcji kod jest bardzo podobny do tego z Chrome.

OperaOptions options = new OperaOptions()
 options.addExtensions(new File("/path/to/extension.crx"))
 options.setBinary(new File("/path/to/binary"));

OperaDriver driver = new OperaDriver(options);

Warto jest zwrócić uwagę na listę zgłoszeń do projektu chcąc używać różnych opcji znanych z bardziej popularnych driverów – Opera issue.

Safari:

Z racji popularności MacOS również i dla Safari została utworzona możliwość uruchamiania testów razem z Selenium. Jeżeli chcesz uruchomić lokalnie drivera to musisz wykonać pracę przed faktycznym uruchomieniem testów.

Dla High Sierra i późniejszych uruchom polecenie z terminala po raz pierwszy i wpisz swoje hasło, aby autoryzować WebDrivera:

safaridriver --enable

Dla wersji El Capitan i Sierra włącz menu programisty i w preferencjach Safari zaznacz opcję Allow Remote Automation w Develop Menu. Uruchom następujące polecenie z terminala po raz pierwszy i wpisz swoje hasło, aby autoryzować WebDrivera:

/usr/bin/safaridriver -p 1337</

Później zostaje już tylko zaimportowanie do testu.

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.safari.SafariDriver;

WebDriver driver = new SafariDriver();

Musimy pamiętać by zautomatyzować testy na Safari konieczne jest posiadanie systemu operacyjnego Appla. My w ramach prób będziemy chcieli spróbować automatyzacji z użyciem Safari Driver na Virtual Boxie.

Internet Explorer:

Będący raczej już w odwrocie driver, z uwagi na zakończenie wspierania przeglądarki przez producenta. Z racji przenoszenia ruchu na MS Edge i spadku ruchu na IE 11, jest to tylko informacyjny akapit.

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;

WebDriver driver = new InternetExplorerDriver();

System.setProperty("webdriver.ie.driver", "C:/path/to/IEDriver.exe");

Uruchomienie Driverów dla innych języków

Poniżej kilka informacji dla innych języków niż Java.

Python

Ustawienia dla poszczególnych przeglądarek w języku Python.

Chrome:
from selenium.webdriver import Chrome

driver = Chrome()
from selenium.webdriver import Chrome

with Chrome() as driver:
Chrome(executable_path='/path/to/chromedriver')
Firefox:
from selenium.webdriver import Firefox

driver = Firefox()
from selenium.webdriver import Firefox

with Firefox() as driver:

Firefox(executable_path='/path/to/geckodriver')
Edge:
from selenium.webdriver import Edge

driver = Edge()
from selenium.webdriver import Edge

with Edge() as driver:

Edge(executable_path='/path/to/MicrosoftWebDriver.exe')
Internet Explorer
from selenium.webdriver import Ie

driver = Ie()
from selenium.webdriver import Ie

with Ie() as driver:

Ie(executable_path='/path/to/IEDriverServer.exe')

Opera
from selenium.webdriver import Opera

driver = Opera()
from selenium.webdriver import Opera

with Opera() as driver:


Safari
from selenium.webdriver import Safari

driver = Safari()
from selenium.webdriver import Safari

with Safari() as driver:

C#

Ustawienia dla poszczególnych przeglądarek w języku C#.

Chrome:
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

IWebDriver driver = new ChromeDriver();

new ChromeDriver("/path/to/chromedriver");
Firefox:
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;

IWebDriver driver = new FirefoxDriver();

new FirefoxDriver("/path/to/geckodriver");
Edge:
using OpenQA.Selenium;
using OpenQA.Selenium.Edge;

IWebDriver driver = new EdgeDriver();

new EdgeDriver("/path/to/MicrosoftWebDriver.exe");
Internet Explorer
using OpenQA.Selenium;
using OpenQA.Selenium.IE;

IWebDriver driver = new InternetExplorerDriver();

new InternetExplorerDriver("C:/path/to/IEDriver.exe");
Opera
using OpenQA.Selenium; 
using OpenQA.Selenium.Opera; 

IWebDriver driver = new OperaDriver();
Safari
using OpenQA.Selenium;
using OpenQA.Selenium.Safari;

IWebDriver driver = new SafariDriver();
Java Script

Ustawienia dla poszczególnych przeglądarek w języku JS.

Chrome:
const {Builder} = require('selenium-webdriver');

(async function myFunction() {
    let driver = await new Builder().forBrowser('chrome').build();      })();

chrome.setDefaultService(new chrome.ServiceBuilder('path/to/chromedriver').build());
Firefox:
const {Builder} = require('selenium-webdriver');

(async function myFunction() {
   let driver = await new Builder().forBrowser('firefox').build();     })();

const firefox = require('selenium-webdriver/firefox');

const options = new firefox.Options();
options.setBinary("/path/to/geckodriver");
Edge:
const {Builder} = require('selenium-webdriver');

(async function myFunction() {
   let driver = await new Builder().forBrowser('MicrosoftEdge').build();
   
})();

const {Builder} = require("selenium-webdriver");
const edge = require('selenium-webdriver/edge');
let service = new edge.ServiceBuilder("/path/to/msedgedriver.exe");
(async function test() {
    let driver = await new Builder()
                .setEdgeService(service)
                .forBrowser('MicrosoftEdge')
                .build();
})();
Internet Explorer
const {Builder} = require('selenium-webdriver');

(async function myFunction() {
   let driver = await new Builder().forBrowser('internet explorer').build();
  
})();

const {Builder} = require("selenium-webdriver");
const ie = require('selenium-webdriver/ie');
let service = new ie.ServiceBuilder("/path/to/IEDriverServer.exe");
(async function test() {
    let driver = await new Builder()
                .setIeService(service)
                .forBrowser('internet explorer')
                .build();
})();
Opera

const {Builder} = require("selenium-webdriver");
const opera = require('selenium-webdriver/opera');
(async function test() {
let driver = await new Builder()
.forBrowser('opera')
.build();
})();
Safari
const {Builder} = require('selenium-webdriver');

(async function myFunction() {
   let driver = await new Builder().forBrowser('safari').build();     
})();

Podsumowanie

Selenium WebDriver ustawienie drivera ma na celu wskazanie Ci podstaw do ustawienia u siebie drivera którego potrzebujesz. Poszczególnego drivery, wraz z zaletami i wadami będziemy opisywać w odrębnych wpisach. W tym dziale będziemy opisywać szerzej nie tylko o Selenium, ale także o CSS selectorach, xpath, czy różnych ciekawostkach.  Więcej informacji o testach automatycznych w Selenium znajdziesz tutaj.