Kami menulis autotest menggunakan Selenium Webdriver, Java 8 dan pola Page Object

Artikel ini membahas tentang penciptaan swa-uji yang cukup sederhana. Artikel ini akan berguna untuk otomatisasi pemula.


Materi yang disajikan dapat diakses semaksimal mungkin, namun, akan jauh lebih mudah untuk memahami apa yang sedang kita bicarakan jika Anda memiliki setidaknya ide minimal tentang bahasa Jawa: kelas, metode, dll.


Kita akan butuh:


  • Lingkungan pengembangan yang terinstal Intellij IDEA (adalah IDE paling populer, untuk kebanyakan kasus, versi gratis Edisi Komunitas sudah cukup);
  • Java diinstal (jdk / openjdk) dan Maven, terdaftar di lingkungan sistem OS;
  • Browser dan chromedriver Chrome - program untuk mengirimkan perintah ke browser.

Pembuatan proyek


Jalankan Intellij IDEA, pelajari beberapa poin pertama tentang pengiriman statistik, mengimpor proyek, memilih skema warna, dll. - cukup pilih opsi default.


Di jendela yang muncul di akhir, pilih "Buat Proyek Baru", dan di dalamnya jenis proyek adalah Maven. Jendela akan terlihat seperti:


gambar


  • Maven adalah alat pembangun untuk proyek-proyek Jawa;
  • Project SDK - versi Java yang diinstal pada komputer;
  • Buat dari pola dasar adalah kemampuan untuk membuat proyek dengan pola dasar tertentu (pada tahap ini, kotak centang ini tidak perlu ditandai).

Klik "Selanjutnya." Jendela berikut akan terbuka:


gambar


Groupid dan Artifactid adalah pengidentifikasi proyek di Maven. Ada aturan tertentu untuk mengisi barang-barang ini:


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

«Finish»: IDE pom.xml:


gambar


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


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


gambar


( 3.14.0). :


gambar


«Maven» pom.xml


<dependencies> </dependencies>

. Junit ( 4.12).


pom-:


gambar



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


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


Java , , LoginTest ( Java ). IDE :


gambar


IDE


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


gambar


Java: «File», Settings.


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


gambar


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

gambar


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


gambar


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); } }


gambar


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


gambar


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; }

gambar


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, ( ), . , , .


, :


gambar


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() :


gambar


All Articles