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 сами себя протестируют, не переживайте =)