Gallagher
(Gallagher)
26.Март.2019 12:48:55
#1
В общем что-то процесс встал …
в общем создаю объект LoginPage … но мне же в нем надо перед тестом поставить собакаТест и потом уже создать статический метод и в этом методе создавать метод под каждое поле как здесь https://comaqa.gitbook.io/selenium-webdriver-lectures/page-object-pattern.-arkhitektura-testovogo-proekta./ispolzovanie-patterna-page-object .
А куда девать то все типа
System.setProperty("webdriver.chrome.driver", "/Users/s.ivonin/Downloads/chromedrivernew/chromedriver.exe");
ChromeDriver driver = new ChromeDriver();
driver.manage().window().setSize(new Dimension(1300, 800));
…
package ru.Online;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.support.ui.WebDriverWait;
public class LoginPage {
@Test
public static void testWait(){
System.setProperty("webdriver.chrome.driver", "/Users/s.ivonin/Downloads/chromedrivernew/chromedriver.exe");
ChromeDriver driver = new ChromeDriver();
driver.manage().window().setSize(new Dimension(1300, 800));
By usernameLocator = By.id("first_name");
By usersurnameLocator = By.id("last_name");
By userpatLocator = By.id("middleName");
By mailLocator = By.id("reg_email");
driver.get("http://test.ru/register/create#professor");
// закрываем отладочную панель
public static LoginPage closeLaravel(){
WebElement close = driver.findElement(By.xpath("//a[@class='phpdebugbar-close-btn']"));
close.click();}
// заполняем поле E-mail
String email = "ivonin85" + "+" + System.currentTimeMillis() + "@gmail.com";
WebElement selectMail = driver.findElement(mailLocator);
selectMail.sendKeys(email);
// заполняем первое поле фамилия
WebElement selectSurname = driver.findElement(usersurnameLocator);
selectSurname.sendKeys("Иванов");
// заполняем первое поле имя
WebElement selectName = driver.findElement(usernameLocator);
selectName.sendKeys("Иван");
}
}
Gallagher
(Gallagher)
26.Март.2019 12:59:03
#2
В общем как я это вижу: создаешь Объект где под каждое поле своя функция, делаешь его статик и можно обращаться к ним через ИмяКлассна.ИмяФункции и вызывать где угодно… А в каком файле инициализировать драйвер, ставить эту собакаТест?
Мое мнение, PageObject должен быть в отдельном классе. Потом уже инициировать его перед тестом, или в тесте (зависит некоторых факторов).
Gallagher
(Gallagher)
26.Март.2019 14:20:43
#4
Ну я вообще правильно понял этот подход? У меня грубо говоря каждая страница (уникальная страница) это отдельный класс … И потом я уже вызываю те методы которые мне нужно в файле …
Gallagher
(Gallagher)
26.Март.2019 19:26:10
#5
Без коллег программистов все бы училось гораздо дольше … В общем пошел путем pageObject … если конечно это он ))))
Такая пока картинка получается …
package ru.test;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.support.ui.WebDriverWait;
public class TestTest {
@Test
public void testWait() {
System.setProperty("webdriver.chrome.driver", "/Users/s.ivanov/Downloads/chromedrivernew/chromedriver.exe");
ChromeDriver driver = new ChromeDriver();
driver.manage().window().setSize(new Dimension(1300, 800));
LoginPage registration = new LoginPage(driver);
// открыть страницу
driver.get("http://test.ru/register/create#professor");
// закрыть панель Laravel
registration.closeLaravel();
// ввести E-mail
registration.sendMail();
// ввести имя
registration.sendName();
// вводим фамилию
registration.sendSurname();
// вводим фамилию
registration.sendPatronymic();
// вводим организацию
registration.sendorganization();
// вводим дисциплину
registration.sendDiscipline();
// соглашаемся с условиями
registration.checkMark();
// нажать кнопку регистрации
registration.clickButton();
// проверяем что на странице есть страница с поздравлением
registration.confirmRegistration();
System.out.println("Регистрация преподавателя прошла успешно");
}
}
package ru.test;
import org.junit.Assert;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.support.ui.WebDriverWait;
public class LoginPage {
private WebDriver driver;
private WebDriverWait wait;
public LoginPage(WebDriver driver){
this.driver = driver;
this.wait = new WebDriverWait(driver, 10);
}
@Test
public void closeLaravel(){
WebElement close = driver.findElement(By.xpath("//a[@class='phpdebugbar-close-btn']"));
close.click();}
public void sendMail(){
String email = "ivanov85" + "+" + System.currentTimeMillis() + "@gmail.com";
WebElement selectMail = driver.findElement(By.id("reg_email"));
selectMail.sendKeys(email);
}
public void sendName(){
WebElement selectName = driver.findElement(By.id("last_name"));
selectName.sendKeys("Иван");
}
public void sendSurname(){
WebElement selectSurname = driver.findElement(By.id("first_name"));
selectSurname.sendKeys("Иванов");
}
public void sendPatronymic(){
WebElement selectPatronymic = driver.findElement(By.id("middleName"));
selectPatronymic.sendKeys("Иванович");
}
public void sendorganization(){
WebElement organization = driver.findElements(By.id("organization")).get(0);
Select selectOrganization = new Select(organization);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("selection")));
selectOrganization.selectByValue("E60EE044-341C-4679-BAEA-492B50F6DA6C");
}
public void sendDiscipline(){
WebElement discipline = driver.findElement(By.xpath("//*[@id=\"registration-form\"]/fieldset/div[8]/div/span[1]/span[1]/span/ul"));
discipline.click();
// наводим мышку на список
Actions actions = new Actions(driver);
actions.moveToElement(discipline).build().perform();
// выбираем дисциплину из выпадающего списка
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"select2-discipline-results\"]/li[3]"))).click();
}
public void checkMark(){
WebElement checkMark = driver.findElement(By.cssSelector("#agree"));
checkMark.click();
}
public void clickButton (){
WebElement button = driver.findElement(By.id("registration-form"));
button.findElement(By.cssSelector("button[class=\"btn btn-lg btn-danger\"]")).click();
}
public void confirmRegistration(){
WebElement str = driver.findElement(By.cssSelector(".lead.text-success"));
String strtrue = str.getText();
Assert.assertTrue(strtrue.equals("Учетная запись на сайте test.ru создана!"));
}
}
Получше
Данные для теста лучше подавать как параметры, и валидации (асерты) делать в тесте а не в PageObject.
Можно в одну строчку писать, переменная не нужна если ее используешь один раз
driver.findElement(By.id(“first_name”)).sendKeys(“Иванов”);
Данные подавать через параметры, они разные могут быть
public void sendName(string name){
driver.findElement(By.id(“last_name”)).sendKeys(name);;
}
Gallagher
(Gallagher)
27.Март.2019 08:44:53
#8
Ну это я просто уже на ходу в конце дня сочинял ))
Ну как я понимаю подход верный… Раз ничего не говорите…
Блин, я изучаю две недели webdriver и в принципе уже могу заавтоматизировать весь сайт применяя PageObject … Это и вся автоматизация? )))
Нет, автоматизация не ограничивается написанием авто тестов. Настройка инфраструктуры, качественных репортов, данных для анализа результатов, также нужно пройтись по гра■■■м . Ну и наконец автоматизировать можно не только веб, так что будет все, когда будешь думать что никогда не будет все
Gallagher
(Gallagher)
27.Март.2019 09:58:53
#10
Следующий этап я так понимаю многобраузерность и многопоточность?
Я пробовал свой код написанный под Chrome запускать через мозилу, что-то не пошло …
Кстати вы как это реализуете вообще? Один скрипт для всех браузеров?
Noksa
(Alexandr D.)
27.Март.2019 12:06:55
#11
На мой взгляд плохая тема.
PO должен знать, что проверять , но какую именно проверку совершать, должен знать тест.
Т.е. вы можете написать проверку какого-то поля, но как именно проверять, надо передавать через коллбэк, либо использовать в параметре общий интерфейс, что-то типа этого: Constraints · nunit/docs Wiki · GitHub
MOSTOR
27.Март.2019 12:15:09
#12
Да, теперь напишешь еще 20 тестов и ты сеньор автоматизатор, можешь смело идти к начальству и просить повышение.
2 лайка
Noksa
(Alexandr D.)
27.Март.2019 12:20:02
#13
Ну, любой человек может заавтоматизировать любой сайт, в этом особо тяжелого ничего нет.
А вот делать это с умом - это приходит с опытом)
Gallagher
(Gallagher)
27.Март.2019 12:21:05
#14
Ну как бы это в любой профессии так …
Да! Вам пора двигаться дальше - в разработку!
А backend, в особенности всякие хитрые штуки поверх TCP/IP сами себя протестируют, не переживайте =)