Escrevemos um autoteste usando Selenium Webdriver, Java 8 e o padrão Objeto de Página

Este artigo discute a criação de um autoteste simples o suficiente. Este artigo será útil para automação iniciante.


O material é apresentado o mais acessível possível, no entanto, será muito mais fácil entender do que estamos falando, se você tiver pelo menos idéias mínimas sobre a linguagem Java: classes, métodos, etc.


Nós vamos precisar:


  • Ambiente de desenvolvimento instalado Intellij IDEA (é o IDE mais popular; na maioria dos casos, basta uma versão gratuita do Community Edition);
  • Java instalado (jdk / openjdk) e Maven, registrados no ambiente do sistema do SO;
  • Navegador Chrome e chromedriver - um programa para transmitir comandos para o navegador.

Criação de projeto


Execute o Intellij IDEA, analise os primeiros pontos em relação ao envio de estatísticas, importação de projetos, escolha de um esquema de cores etc. - basta selecionar as opções padrão.


Na janela que aparece no final, selecione "Criar novo projeto" e nela o tipo de projeto é Maven. A janela terá a seguinte aparência:


imagem


  • Maven é uma ferramenta de construção para projetos Java;
  • Projeto SDK - a versão do Java que está instalada no computador;
  • Criar a partir do arquétipo é a capacidade de criar um projeto com um arquétipo específico (neste estágio, essa caixa de seleção não precisa ser marcada).

Clique em "Next". A seguinte janela será aberta:


imagem


Groupid e Artifactid são identificadores de projeto no Maven. Existem certas regras para preencher esses itens:


  • Groupid — . Java: . , -, com.email.email;
  • Artifactid — ;
  • Version — .

«Finish»: IDE pom.xml:


imagem


, : Groupid, Artefiactid, Version. Pom.xml — . Pom- (), .


: Selenium Java Junit. Maven mvnrepository.com, Selenium Java :


imagem


( 3.14.0). :


imagem


«Maven» pom.xml


<dependencies> </dependencies>

. Junit ( 4.12).


pom-:


imagem



. src : «main» «test». , , «test». «test», «java» «New», «Package». . , Groupid — «org.example».


— Java, . «New», «Java Class».


Java , , LoginTest ( Java ). IDE :


imagem


IDE


, IDE. «Open Module Settings». «Sources» «Language level» 5. 8 ( , Java) :


imagem


Java: «File», Settings.


«Build, Execution, Deployment» -> «Compiler» -> «Java Compiler». 1.5. 8 :


imagem


Test Suite


:


  1. ;
  2. ;
  3. — ;
  4. «…».

, .


( ).



LoginTest . «setup()», . , :


WebDriver driver = new ChromeDriver();

WebDriver , chomedriver ( Windows .exe):


System.setProperty("webdriver.chrome.driver", "/usr/bin/chromedriver");

, :


driver.manage().window().maximaze();

, , . . : . Implicitly Wait, :


driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

, , (10 ) 500 . , , , .


:


driver.get("https://passport.yandex.ru/auth")


( ).


«test» «resources», «conf.properties», :


loginpage = https://passport.yandex.ru/auth


chromedriver = /usr/bin/chromedriver

imagem


«org.example» «ConfProperties», «conf.properties» :


imagem


package org.example;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
public class ConfProperties {
    protected static FileInputStream fileInputStream;
    protected static Properties PROPERTIES;
    static {
        try {
            //     
            fileInputStream = new FileInputStream("src/test/resources/conf.properties");
            PROPERTIES = new Properties();
            PROPERTIES.load(fileInputStream);
        } catch (IOException e) {
            e.printStackTrace();
            //   (   ..)
        } finally {
            if (fileInputStream != null)
                try {
                    fileInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace(); } } }
    /**
     *          
     */
    public static String getProperty(String key) {
        return PROPERTIES.getProperty(key); } }


imagem


«setup()» Junit «@BeforeClass», , . Junit Test.


package org.example;
import org.junit.BeforeClass;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;
public class LoginTest {
    /**
     *   
     */
    @BeforeClass
    public static void setup() {
        //      
        System.setProperty("webdriver.chrome.driver", ConfProperties.getProperty("chromedriver"));
        //  
        WebDriver driver = new ChromeDriver();
        //    
        driver.manage().window().maximize();
        //    = 10 .
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        //       
        driver.get(ConfProperties.getProperty("loginpage")); } }

Page Object


Page Object , , .


«org.example» LoginPage, .


(https://passport.yandex.ru/auth) Chrome. , , . « ». ( ) — .


. . , «Copy» -> «Copy XPath».


//*[@id="root"]/div/div/div[2]/div/div/div[3]/div[2]/div/div/div[1]/form/div[1]/div[1]/label

Page Object @FindBy.


:


@FindBy(xpath = "//*[@id="root"]/div/div/div[2]/div/div/div[3]/div[2]/div/div/div[1]/form/div[1]/div[1]/label")
private WebElement loginField;

loginField ( LoginPage, .. ).


, xpath ( « xpath ». , , id:


imagem


xpath:


@FindBy(xpath = "//*[contains(@id, 'passp-field-login')]")

, , .


.


«»:


@FindBy(xpath = "//*[contains(text(), '')]")
private WebElement loginBtn;

:


@FindBy(xpath = "//*[contains(@id, 'passp-field-passwd')]")
private WebElement passwdField;

.


:


public void inputLogin(String login) {
        loginField.sendKeys(login); }

:


public void inputPasswd(String passwd) {
        passwdField.sendKeys(passwd); }

:


public void clickLoginBtn() {
        loginBtn.click(); }

, @FindBy , PageFactory. Webdriver:


public WebDriver driver;
public LoginPage(WebDriver driver) {
        PageFactory.initElements(driver, this);
        this.driver = driver; }

imagem


package org.example;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
public class LoginPage {
    /**
     *  ,    
     */
    public WebDriver driver;
    public LoginPage(WebDriver driver) {
        PageFactory.initElements(driver, this);
        this.driver = driver; }
    /**
     *     
     */
    @FindBy(xpath = "//*[contains(@id, 'passp-field-login')]")
    private WebElement loginField;
    /**
     *      
     */
    @FindBy(xpath = "//*[contains(text(), '')]/..")
    private WebElement loginBtn;
    /**
     *     
     */
    @FindBy(xpath = "//*[contains(@id, 'passp-field-passwd')]")
    private WebElement passwdField;
    /**
     *    
     */
    public void inputLogin(String login) {
        loginField.sendKeys(login); }
    /**
     *    
     */
    public void inputPasswd(String passwd) {
        passwdField.sendKeys(passwd); }
    /**
     *        
     */
    public void clickLoginBtn() {
        loginBtn.click(); } }

. .. , Page Object . ProfilePage, ( ), . , , .


, :


imagem


package org.example;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
public class ProfilePage {
    /**
     *  ,    
     */
    public WebDriver driver;
    public ProfilePage(WebDriver driver) {
        PageFactory.initElements(driver, this);
        this.driver = driver; }
    /**
     *    
     */
    @FindBy(xpath = "//*[contains(@class, 'account__name_hasAccentLetter')]")
    private WebElement userMenu;
    /**
     *      
     */
    @FindBy(xpath = "//*[contains(@class, 'menu-item_action_exit menu__item menu__item_type_link')]")
    private WebElement logoutBtn;
    /**
     *        
     */
    public String getUserName() {
        String userName = userMenu.getText();
        return userName; }
    /**
     *      
     */
    public void entryMenu() {
        userMenu.click(); }
    /**
     *       
     */
    public void userLogout() {
        logoutBtn.click(); } }

: getUserName() , .. «» . , . getUserName() :


public String getUserName() {
        WebDriverWait wait = new WebDriverWait(driver, 10);
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[contains(@class, 'account__name_hasAccentLetter')]")));
        String userName = userMenu.getText();
        return userName; }

LoginTest - :


public static LoginPage loginPage;
public static ProfilePage profilePage;


public static WebDriver driver;

@BeforeClass . new. driver, , :


loginPage = new LoginPage(driver);
profilePage = new ProfilePage(driver);

(.. ):


driver = new ChromeDriver();


. loginTest() :


@Test
    public void loginTest() {
        // login/password        chromedriver
// loginpage
// 
        loginPage.inputLogin(ConfProperties.getProperty("login"));
    //  
        loginPage.clickLoginBtn();
    // 
        loginPage.inputPasswd(ConfProperties.getProperty("password"));
    //  
        loginPage.clickLoginBtn();
        //  
        String user = profilePage.getUserName();
    //       
        Assert.assertEquals(ConfProperties.getProperty("login"), user); }

. @AfterClass ( , ).


«», .


@AfterClass
    public static void tearDown() {
        profilePage.entryMenu();
        profilePage.userLogout();
        driver.quit(); }

.



, :


package org.example;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;
public class LoginTest {
    public static LoginPage loginPage;
    public static ProfilePage profilePage;
    public static WebDriver driver;

    /**
     *   
     */
    @BeforeClass
    public static void setup() {
        //      
        System.setProperty("webdriver.chrome.driver", ConfProperties.getProperty("chromedriver"));
        //  
        driver = new ChromeDriver();
        loginPage = new LoginPage(driver);
        profilePage = new ProfilePage(driver);
        //    
        driver.manage().window().maximize();
        //    = 10 .
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        //       
        driver.get(ConfProperties.getProperty("loginpage")); }
    /**
     *     
     */
    @Test
    public void loginTest() {
        //     LoginPage     
        // login/password        chromedriver
        // loginpage
        // 
        loginPage.inputLogin(ConfProperties.getProperty("login"));
        //  
        loginPage.clickLoginBtn();
        // 
        loginPage.inputPasswd(ConfProperties.getProperty("password"));
        //  
        loginPage.clickLoginBtn();
        //  
        String user = profilePage.getUserName();
        //       
        Assert.assertEquals(ConfProperties.getProperty("login"), user); }
    /**
     *         
     */
    @AfterClass
    public static void tearDown() {
        profilePage.entryMenu();
        profilePage.userLogout();
        driver.quit(); } }


Intellij Idea :


  • Alt+Shift+F10;
  • , Run;

, Idea , loginTest() :


imagem


All Articles