Cet article traite de la création d'un auto-test assez simple. Cet article sera utile pour l'automatisation des débutants.
Le matériel est présenté aussi accessible que possible, cependant, il sera beaucoup plus facile de comprendre de quoi nous parlons si vous avez au moins un minimum d'idées sur le langage Java: classes, méthodes, etc.
Nous aurons besoin:
- Environnement de développement installé Intellij IDEA (est l'IDE le plus populaire, dans la plupart des cas, une version gratuite de Community Edition suffit);
- installé Java (jdk / openjdk) et Maven, enregistré dans l'environnement système du système d'exploitation;
- Navigateur Chrome et chromedriver - un programme pour transmettre des commandes au navigateur.
Création de projet
Exécutez Intellij IDEA, passez par les premiers points concernant l'envoi de statistiques, l'importation de projets, le choix d'un jeu de couleurs, etc. - sélectionnez simplement les options par défaut.
Dans la fenêtre qui apparaît à la fin, sélectionnez «Créer un nouveau projet» et le type de projet est Maven. La fenêtre ressemblera à:

- Maven est un outil de construction pour les projets Java;
- Project SDK - la version de Java installée sur l'ordinateur;
- Créer à partir d'un archétype est la possibilité de créer un projet avec un archétype spécifique (à ce stade, cette case à cocher n'a pas besoin d'être cochée).
Cliquez sur Suivant." La fenêtre suivante s'ouvrira:

Groupid et Artifactid sont des identificateurs de projet dans Maven. Il existe certaines règles pour remplir ces éléments:
- Groupid — . Java: . , -, com.email.email;
- Artifactid — ;
- Version — .
«Finish»: IDE pom.xml:

, : Groupid, Artefiactid, Version. Pom.xml — . Pom- (), .
: Selenium Java Junit. Maven mvnrepository.com, Selenium Java :

( 3.14.0). :

«Maven» pom.xml
<dependencies> </dependencies>
. Junit ( 4.12).
pom-:

. src : «main» «test». , , «test». «test», «java» «New», «Package». . , Groupid — «org.example».
— Java, . «New», «Java Class».
Java , , LoginTest ( Java ). IDE :

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

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

Test Suite
:
- ;
- ;
- — ;
- «…».
, .
( ).
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:
chromedriver = /usr/bin/chromedriver

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

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

«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();
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».
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:

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

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

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() {
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();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get(ConfProperties.getProperty("loginpage")); }
@Test
public void loginTest() {
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 :
, Idea , loginTest() :
