julia_v_iluhina

Untitled

Jan 11th, 2017
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.39 KB | None | 0 0
  1. public class ConciseAPI {
  2.  
  3.     private static WebDriver driver;
  4.  
  5.     public static WebDriver getDriver() {
  6.         return driver;
  7.     }
  8.  
  9.     public static void setDriver(WebDriver driver){
  10.         ConciseAPI.driver = driver;
  11.     }
  12. /*
  13.     это = ок
  14. */
  15.  
  16. public static FirefoxDriver driverFirefox;
  17.  
  18. /*
  19.     а вот это уже - лишнее
  20. */
  21. **************************************************
  22. public class BaseTest {
  23.  
  24.  
  25.     @BeforeClass
  26.     public static void WebDriver() {
  27.         driver = new FirefoxDriver();
  28.         setDriver(WebDriver driver);
  29.     }
  30.     /*
  31.         вряд ли такой код работает)
  32.         тут - проще все
  33.  
  34.         если делать в 2 шага то
  35.             WebDriver driver = new FirefoxDriver();
  36.             setDriver(driver);
  37.         объявили и инициализировали переменую
  38.         и передали ее в setDriver
  39.  
  40.         а можно и без переменной обойтись
  41.             setDriver(new FirefoxDriver());
  42.         мы сразу - передаем значение - ново созданный вебдрайвер
  43.         как параметр в setDriver
  44.         вот этот вариант - рекомендую
  45.  
  46.         это как раз - ответ на твой вопрос
  47.         Не получилось до конца реализовать строчки из ревью 95-106
  48.  
  49.         поле WebDriver driver - живет в ConciseAPI
  50.         и там же, в ConciseAPI, реализованы методы по его чтению и записи
  51.  
  52.         а снаружи - из базового класса - мы это поле заполним нужным нам значением
  53.         и когда нужно - считаем и удалим вебдрайвер
  54.  
  55.         уточняться в типе до FirefoxDriver - не нужно
  56.         все вебдрайверы приводятся к WebDriver
  57.  
  58.         этим и стоит воспользоваться
  59.         лишь на уровне создания вебдрайвера мы уточняемся - какой вебдрайвер мы создаем
  60.         но - записываем это значение - в поле типа WebDriver driver
  61.         Посмотри - что из себя представляют типы WebDriver и  FirefoxDriver
  62.  
  63.         WebDriver - это интерфейс
  64.         FirefoxDriver - это класс имплементирующий такой интерфейс
  65.         как посмотреть - зажав ctrl кликни на названии типа
  66.  
  67.         это довольно стандартный прием
  68.         объявляем интерфейс и методы в нем
  69.         затем - реализуем классы, имплементирующие такой интерфейс
  70.         и - когда объявляем переменные или типы возвращаемого значения - оперируем типом интерфейса
  71.         но - работаем в реальности с объектами классов, имплементирующих такой интерфейс
  72.         немного забегая вперед
  73.         вот это почитай
  74.         довольно неплохо изложено
  75.         полезные линки по интерфейсам
  76.              http://kostin.ws/java/java-abstract-and-interfaces.html
  77.  
  78.              http://developer.alexanderklimov.ru/android/java/interface.php
  79.  
  80.              https://docs.oracle.com/javase/tutorial/java/concepts/interface.html
  81.  
  82.  
  83.         Статья про нейминг - интерфейсы + классы
  84.         http://www.vertigrated.com/blog/2011/02/interface-and-class-naming-anti-patterns-java-naming-convention-tautologies/
  85.         Вот это тоже важно
  86.         http://stackoverflow.com/questions/1932247/abstract-classes-and-interfaces-best-practices-in-java
  87.         http://joxi.ru/E2pdR1lFB1pyM2
  88.  
  89.         Сейчас - разбери это в общих чертах
  90.         потом - когда будем это использовать на практике - окончательно разберешься
  91.     */
  92.  
  93.     @AfterClass
  94.     public static void closeBrowser() {
  95.         getDriver().quit();
  96.     }
  97.     /*
  98.         к этому методу - вопросов нет
  99.     */
  100. ********************************************************
  101. public class BasePage {
  102. }
  103. ...
  104.  
  105. и непонятно, что с BasePage по итогу делаем, она нам фактически становится не нужна?
  106. /*
  107.     все верно
  108.     при такой реализации - уже не нужен предок для пейджей
  109.     убирай класс)
  110. */
  111. **********************************
  112. public class GmailPage{
  113. /*
  114.     пейджи - уже реализованы как пейджи-модули
  115.     напоминаю - в таком случае не нужно в имени класса пейджа - употреблять Page
  116.     называй класс - просто Gmail
  117.  
  118.     подними старые работы по пейджам
  119.     там точно это было
  120. */
  121. **********************************
  122.     @Test
  123.     public void emailFlow() {
  124.  
  125.         visit();
  126.         login(TestData.email, TestData.password);
  127.  
  128.         String subject = "subject" +
  129.                 new SimpleDateFormat("yyyyMMddHHmmss").format(Calendar.getInstance().getTime());
  130.  
  131.         send(TestData.email, subject);
  132.  
  133. /*
  134.     Когда несколько пейджей - часто оправдано не использовать import static
  135.     для методов пейджей
  136.     а писать код - указывая имя класса пейджа явно
  137.     не send(TestData.email, subject);
  138.     а Mails.send(TestData.email, subject);
  139.    
  140.     и т д
  141.    
  142.     такие уточнения - помогают лучше понять код
  143.     в принципе - это не есть истина в последней инстанции
  144.     но - часто - это способ сделать код нагляднее, однозначнее, проще в написании и понимании
  145.     бери на вооружение)
  146. */
Advertisement
Add Comment
Please, Sign In to add comment