Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class ConciseAPI {
- private static WebDriver driver;
- public static WebDriver getDriver() {
- return driver;
- }
- public static void setDriver(WebDriver driver){
- ConciseAPI.driver = driver;
- }
- /*
- это = ок
- */
- public static FirefoxDriver driverFirefox;
- /*
- а вот это уже - лишнее
- */
- **************************************************
- public class BaseTest {
- @BeforeClass
- public static void WebDriver() {
- driver = new FirefoxDriver();
- setDriver(WebDriver driver);
- }
- /*
- вряд ли такой код работает)
- тут - проще все
- если делать в 2 шага то
- WebDriver driver = new FirefoxDriver();
- setDriver(driver);
- объявили и инициализировали переменую
- и передали ее в setDriver
- а можно и без переменной обойтись
- setDriver(new FirefoxDriver());
- мы сразу - передаем значение - ново созданный вебдрайвер
- как параметр в setDriver
- вот этот вариант - рекомендую
- это как раз - ответ на твой вопрос
- Не получилось до конца реализовать строчки из ревью 95-106
- поле WebDriver driver - живет в ConciseAPI
- и там же, в ConciseAPI, реализованы методы по его чтению и записи
- а снаружи - из базового класса - мы это поле заполним нужным нам значением
- и когда нужно - считаем и удалим вебдрайвер
- уточняться в типе до FirefoxDriver - не нужно
- все вебдрайверы приводятся к WebDriver
- этим и стоит воспользоваться
- лишь на уровне создания вебдрайвера мы уточняемся - какой вебдрайвер мы создаем
- но - записываем это значение - в поле типа WebDriver driver
- Посмотри - что из себя представляют типы WebDriver и FirefoxDriver
- WebDriver - это интерфейс
- FirefoxDriver - это класс имплементирующий такой интерфейс
- как посмотреть - зажав ctrl кликни на названии типа
- это довольно стандартный прием
- объявляем интерфейс и методы в нем
- затем - реализуем классы, имплементирующие такой интерфейс
- и - когда объявляем переменные или типы возвращаемого значения - оперируем типом интерфейса
- но - работаем в реальности с объектами классов, имплементирующих такой интерфейс
- немного забегая вперед
- вот это почитай
- довольно неплохо изложено
- полезные линки по интерфейсам
- http://kostin.ws/java/java-abstract-and-interfaces.html
- http://developer.alexanderklimov.ru/android/java/interface.php
- https://docs.oracle.com/javase/tutorial/java/concepts/interface.html
- Статья про нейминг - интерфейсы + классы
- http://www.vertigrated.com/blog/2011/02/interface-and-class-naming-anti-patterns-java-naming-convention-tautologies/
- Вот это тоже важно
- http://stackoverflow.com/questions/1932247/abstract-classes-and-interfaces-best-practices-in-java
- http://joxi.ru/E2pdR1lFB1pyM2
- Сейчас - разбери это в общих чертах
- потом - когда будем это использовать на практике - окончательно разберешься
- */
- @AfterClass
- public static void closeBrowser() {
- getDriver().quit();
- }
- /*
- к этому методу - вопросов нет
- */
- ********************************************************
- public class BasePage {
- }
- ...
- и непонятно, что с BasePage по итогу делаем, она нам фактически становится не нужна?
- /*
- все верно
- при такой реализации - уже не нужен предок для пейджей
- убирай класс)
- */
- **********************************
- public class GmailPage{
- /*
- пейджи - уже реализованы как пейджи-модули
- напоминаю - в таком случае не нужно в имени класса пейджа - употреблять Page
- называй класс - просто Gmail
- подними старые работы по пейджам
- там точно это было
- */
- **********************************
- @Test
- public void emailFlow() {
- visit();
- login(TestData.email, TestData.password);
- String subject = "subject" +
- new SimpleDateFormat("yyyyMMddHHmmss").format(Calendar.getInstance().getTime());
- send(TestData.email, subject);
- /*
- Когда несколько пейджей - часто оправдано не использовать import static
- для методов пейджей
- а писать код - указывая имя класса пейджа явно
- не send(TestData.email, subject);
- а Mails.send(TestData.email, subject);
- и т д
- такие уточнения - помогают лучше понять код
- в принципе - это не есть истина в последней инстанции
- но - часто - это способ сделать код нагляднее, однозначнее, проще в написании и понимании
- бери на вооружение)
- */
Advertisement
Add Comment
Please, Sign In to add comment