рдпрд╣ рд▓реЗрдЦ рдПрдХ рдХрд╛рдлреА рд╕рд░рд▓ рдЖрддреНрдо-рдкрд░реАрдХреНрд╖рдг рдХреЗ рдирд┐рд░реНрдорд╛рдг рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд▓реЗрдЦ рд╢реБрд░реБрдЖрддреА рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред
рд╕рд╛рдордЧреНрд░реА рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕реБрд▓рдн рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬрд╛рд╡рд╛ рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдиреНрдпреВрдирддрдо рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ: рдХрдХреНрд╖рд╛рдПрдВ, рд╡рд┐рдзрд┐рдпрд╛рдБ, рдЖрджрд┐ред
рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
- рд╕реНрдерд╛рдкрд┐рдд рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдорд╛рд╣реМрд▓ Intellij IDEA (рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЖрдИрдбреАрдИ рд╣реИ, рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдПрдХ рдореБрдХреНрдд рд╕рдВрд╕реНрдХрд░рдг рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ);
- рдУрдПрд╕ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдЬрд╛рд╡рд╛ (jdk / openjdk) рдФрд░ рдорд╛рд╡реЗрди рд╕реНрдерд╛рдкрд┐рдд;
- рдХреНрд░реЛрдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рдХреНрд░реЛрдореЗрдбреНрд░рд┐рд╡рд░ - рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрдорд╛рдВрдб рдЯреНрд░рд╛рдВрд╕рдорд┐рдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдоред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрдорд╛рдг
рдЗрдВрдЯреЗрд▓реАрдЬ рдЖрдИрдбреАрдИрдП рдЪрд▓рд╛рдПрдВ, рдкрд╣рд▓реЗ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдВрдХрдбрд╝реЗ рднреЗрдЬреЗрдВ, рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдирд╛, рдПрдХ рд░рдВрдЧ рдпреЛрдЬрдирд╛ рдЪреБрдирдирд╛, рдЖрджрд┐ред - рдмрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред
рдЕрдВрдд рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдВрдбреЛ рдореЗрдВ, "рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ" рдЪреБрдиреЗрдВ, рдФрд░ рдЗрд╕рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░ рдорд╛рд╡реЗрди рд╣реИред рдЦрд┐рдбрд╝рдХреА рдХреА рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

- рдорд╛рд╡реЗрди рдЬрд╛рд╡рд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрдорд╛рдг рдЙрдкрдХрд░рдг рд╣реИ;
- рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдПрд╕рдбреАрдХреЗ - рдЬрд╛рд╡рд╛ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬреЛ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ;
- рдЖрд░реНрдХрд┐рдЯреЗрдХ рд╕реЗ рдмрдирд╛рдПрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрд░реНрдХ-рдЯрд╛рдЗрдк рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ (рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдЗрд╕ рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ)ред
рдЕрдЧрд▓рд╛ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред" рдирд┐рдореНрди рд╡рд┐рдВрдбреЛ рдЦреБрд▓реЗрдЧреА:

рдорд╛рд╡реЗрди рдореЗрдВ рдЧреНрд░реБрдкрд┐рдб рдФрд░ рдЖрд░реНрдЯрдлреИрдХреНрдЯрд┐рдб рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИрдВред рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рднрд░рдиреЗ рдХреЗ рдХреБрдЫ рдирд┐рдпрдо рд╣реИрдВ:
- 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() :
