selenium-webdriver
Basic Selenium Webdriver-programma
Zoeken…
Invoering
Dit onderwerp is bedoeld om het basisprogramma voor webstuurprogramma's te tonen in door selenium ondersteunde talen zoals C #, Groovy, Java, Perl, PHP, Python en Ruby.
Journey omvat het openen van het stuurprogramma van de browser -> Google-pagina -> de browser afsluiten
C #
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace BasicWebdriver
{
class WebDriverTest
{
static void Main()
{
using (var driver = new ChromeDriver())
{
driver.Navigate().GoToUrl("http://www.google.com");
}
}
}
}
Het bovenstaande 'programma' navigeert naar de startpagina van Google en sluit vervolgens de browser nadat de pagina volledig is geladen.
using (var driver = new ChromeDriver())
Hiermee wordt een nieuw WebDriver-object gestart met behulp van de IWebdriver
interface en wordt een nieuw exemplaar van een browservenster gemaakt. In dit voorbeeld gebruiken we ChromeDriver
(hoewel dit kan worden vervangen door het juiste stuurprogramma voor elke browser die we wilden gebruiken). We verpakken dit met een using
, omdat IWebDriver
IDisposable
en dus niet expliciet het driver.Quit();
hoeft in te typen. driver.Quit();
.
Als u uw WebDriver niet hebt gedownload met NuGet , moet u een argument doorgeven in de vorm van een pad naar de map waar het stuurprogramma 'chromedriver.exe' zich bevindt.
Navigeren
driver.Navigate().GoToUrl("http://www.google.com");
en
driver.Url = "http://www.google.com";
Beide lijnen doen hetzelfde. Ze instrueren het stuurprogramma om naar een specifieke URL te navigeren en te wachten tot de pagina is geladen voordat deze naar de volgende instructie gaat.
Er zijn andere methoden gekoppeld aan navigatie, zoals Back()
, Forward()
of Refresh()
.
Daarna wordt het using
blok veilig afgesloten en wordt het object verwijderd.
Python
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
def set_up_driver():
path_to_chrome_driver = 'chromedriver'
return webdriver.Chrome(executable_path=path_to_chrome_driver)
def get_google():
driver = set_up_driver()
driver.get('http://www.google.com')
tear_down(driver)
def tear_down(driver):
driver.quit()
if '__main__' == __name__:
get_google()
Het bovenstaande 'programma' navigeert naar de startpagina van Google en sluit vervolgens de browser voordat u het voltooit.
if '__main__' == __name__:
get_google()
Eerst hebben we onze hoofdfunctie, ons toegangspunt tot het programma, dat get_google()
.
def get_google():
driver = set_up_driver()
get_google()
begint vervolgens met het maken van onze driver
via set_up_driver()
:
def set_up_driver():
path_to_chrome_driver = 'chromedriver'
return webdriver.Chrome(executable_path=path_to_chrome_driver)
Waarmee we aangeven waar chromedriver.exe
zich bevindt en ons stuurprogrammaobject met dit pad instantiëren. De rest van get_google()
navigeert naar Google:
driver.get('http://www.google.com')
En roept vervolgens tear_down()
die het stuurprogrammaobject tear_down()
:
tear_down(driver)
tear_down()
bevat eenvoudigweg één regel om ons stuurprogrammaobject af te sluiten:
driver.quit()
Dit vertelt de bestuurder om alle geopende browservensters te sluiten en het browserobject weg te doen, omdat we na deze aanroep geen andere code hebben die het programma effectief beëindigt.
Java
De onderstaande code bestaat uit ongeveer 3 stappen.
- Een Chrome-browser openen
- Google-pagina openen
- Sluit de browser af
import org.openqa.selenium;
import org.openqa.selenium.chrome;
public class WebDriverTest {
public static void main(String args[]) {
System.setProperty("webdriver.chrome.driver", "C:\\path\\to\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("http://www.google.com");
driver.quit();
}
}
Het bovenstaande 'programma' navigeert naar de startpagina van Google en sluit vervolgens de browser voordat u het voltooit.
System.setProperty("webdriver.chrome.driver", "C:\\path\\to\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
De eerste regel vertelt het systeem waar het vinden ChromeDriver
(chromedriver.exe) uitvoerbaar. We maken vervolgens ons stuurprogrammavoorwerp door de constructor ChromeDriver()
te roepen, opnieuw kunnen we onze constructor hier voor elke browser / platform aanroepen.
driver.get("http://www.google.com");
Dit vertelt onze chauffeur om naar de opgegeven url te navigeren: http://www.google.com . De Java WebDriver API biedt de methode get()
rechtstreeks op de WebDriver-interface, hoewel verdere navigatiemethoden kunnen worden gevonden via de methode navigate()
, bijvoorbeeld driver.navigate.back()
.
Zodra de pagina is geladen, bellen we onmiddellijk:
driver.quit();
Dit vertelt het stuurprogramma om alle geopende browservensters te sluiten en het stuurprogrammaobject weg te doen, omdat we na deze aanroep geen andere code hebben die het programma effectief beëindigt.
driver.close();
Is een instructie (hier niet getoond) aan de bestuurder om alleen het actieve venster te sluiten, in dit geval omdat we slechts een enkel venster hebben, zouden de instructies identieke resultaten veroorzaken bij het aanroepen van quit()
.
Java - Best practice met paginaklassen
Usecase: Inloggen op FB-account
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class FaceBookLoginTest {
private static WebDriver driver;
HomePage homePage;
LoginPage loginPage;
@BeforeClass
public void openFBPage(){
driver = new FirefoxDriver();
driver.get("https://www.facebook.com/");
loginPage = new LoginPage(driver);
}
@Test
public void loginToFB(){
loginPage.enterUserName("username");
loginPage.enterPassword("password");
homePage = loginPage.clickLogin();
System.out.println(homePage.getUserName());
}
}
Paginaklassen: inlogpagina & startpagina inlogpaginaklasse:
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
public class LoginPage {
WebDriver driver;
public LoginPage(WebDriver driver){
this.driver = driver;
}
@FindBy(id="email")
private WebElement loginTextBox;
@FindBy(id="pass")
private WebElement passwordTextBox;
@FindBy(xpath = ".//input[@data-testid='royal_login_button']")
private WebElement loginBtn;
public void enterUserName(String userName){
if(loginTextBox.isDisplayed()) {
loginTextBox.clear();
loginTextBox.sendKeys(userName);
}
else{
System.out.println("Element is not loaded");
}
}
public void enterPassword(String password){
if(passwordTextBox.isDisplayed()) {
passwordTextBox.clear();
passwordTextBox.sendKeys(password);
}
else{
System.out.println("Element is not loaded");
}
}
public HomePage clickLogin(){
if(loginBtn.isDisplayed()) {
loginBtn.click();
}
return new HomePage(driver);
}
}
Homepaginaklasse:
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
public class HomePage {
WebDriver driver;
public HomePage(WebDriver driver){
this.driver = driver;
}
@FindBy(xpath=".//a[@data-testid='blue_bar_profile_link']/span")
private WebElement userName;
public String getUserName(){
if(userName.isDisplayed()) {
return userName.getText();
}
else {
return "Username is not present";
}
}
}