julia_v_iluhina

Untitled

Oct 6th, 2016
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.84 KB | None | 0 0
  1. public class GoogleSearchTest {
  2.  
  3.     public static WebDriver driver;
  4.     public static WebDriverWait wait;
  5.     /*
  6.         объявила статические переменные
  7.         пока  - фиксирую факты)
  8.     */
  9.  
  10.     @Before
  11.     public void init(){
  12. //        System.setProperty("webdriver.chrome.driver", "/home/belka/Chromedriver/chromedriver");
  13. //        driver = new ChromeDriver();
  14.         driver = new FirefoxDriver();
  15.         wait = new WebDriverWait(driver, 6);
  16.         /*
  17.             но - инициализировала их в @Before-методе
  18.             это значит - что перед запуском каждого теста - будет создаваться свой вебдрайвер
  19.         */
  20.  
  21.         driver.get("http://google.com/ncr");
  22.         /*
  23.             это по пути просто
  24.             вынести в @Before-метод - в общем-то было можно
  25.             но не обязательно
  26.             потом решишь окончательно
  27.         */
  28.     }
  29.  
  30.     @AfterClass
  31.     public static void close(){
  32.         driver.quit();
  33.     }
  34.     /*
  35.         а вот закрываешь вебдрайвер - уже после запуска всех тест-методов
  36.         это значит
  37.             2 вебдрайвера открыли (перед запуском обоих тестов)
  38.             1 закрыли
  39.  
  40.             скорей всего - остался один открытый браузер у тебя
  41.     */
  42.  
  43.     /*
  44.  
  45.     вот это + закрытие вебдрайвера - как раз то, что можно разместить в предке тест-класса
  46.  
  47.             т к  - речь об общей логике тест-класса в целом -
  48.                 когда и какой вебдрайвер открыть,
  49.                 когда его закрыть (это тоже в этом классе должно быть)
  50.  
  51.                 с каким таймаутом ждать - ну, тоже можно в предке тест-класса это разместить
  52.                 хотя... уже это спорно)
  53.                 на самом деле - задание таймаута - это уже детали реализации самого тест-класса
  54.                 и из этих соображений - можно было бы это делать уже в тест-классе
  55.  
  56.             когда открывать и закрывать вебдрайвер
  57.                   сейчас открытие вебдрайвера происходит в @Before-методе
  58.                   это значит - что это будет выполняться перед запуском каждого тест-метода
  59.                   соотвественно - и закрывать надо в таком случае - после запуска каждого тест-метода -
  60.                   в After-методе
  61.  
  62.                     т е для варианта - свой вебдрайвер для каждого тест-метода
  63.                         открывать можно
  64.                             при инициализации не статической переменной
  65.                             instance initialization block
  66.                             Before метод
  67.                         закрывать
  68.                             After метод
  69.  
  70.                     а для варианта - один вебдрайвер на все тест-методы одного класса
  71.                     (такой вариант подходит, если все тесты запускать в одном потоке - как мы до этого и делали)
  72.                         открывать можно
  73.                            при инициализации статической переменной
  74.                            static initialization block
  75.                            BeforeClass метод
  76.                         закрывать
  77.                            AfterClass метод
  78.  
  79.                     какой вариант выбрать - зависит от обстоятельств
  80.                     просто - важно понимать разницу и выбирать наиболее подходящий в данном случае
  81.                     ну и - вариант создания вебдрайвера должен соответствовать варианту его закрытия
  82.  
  83.             Полезные линки
  84.             http://www.javamadesoeasy.com/2015/06/differences-between-instance.html
  85.             http://stackoverflow.com/questions/15493189/beforeclass-vs-static
  86.  
  87.             Получим более содержательное сообщение об ошибке - если работаем с аннотированными методами
  88.             http://www.unknownerror.org/opensource/junit-team/junit/q/stackoverflow/512184/best-practice-initialize-junit-class-fields-in-setup-or-at-declaration
  89.             http://www.javaworld.com/article/2076265/testing-debugging/junit-best-practices.html
  90.             (подзаголовок Do not use the test-case constructor to set up a test case)
  91.     */
  92. ********************************************************
  93. ".srg .g"
  94. /*
  95.     строка ".srg .g" - используется несколько раз
  96.                 используй для этой строки переменую String resultsCssSelector
  97.                 и примени ее в коде
  98.                 будет более DRY
  99.  
  100.     более того
  101.     и для By.cssSelector(".srg .g") - можно переменную организовать
  102.     By results = By.cssSelector(resultsCssSelector)
  103.  
  104.     и будет вообще ок
  105.  
  106.     на самом деле - для проверки
  107.     wait.until(textToBePresentInElementLocated(By.cssSelector(".srg .g:nth-child(1)"), "Selenium automates browsers"));
  108.     подойдет и такой локатор results)
  109.  
  110.     т к именно первый результат проверяем) чисто повезло)
  111.  
  112.     так что - можно вообще такой переменной ограничиться
  113. */
  114. ***********************************************
  115.  
  116.     private void followNthResultLink(int index) {
  117.         ...;    //add for next task "Google Task with separate testFollowLink"
  118.         /*
  119.             смело убирай комментарий
  120.             эта строчка - в принципе полезная
  121.             делает этот метод надежным и не зависимым от контекста вызова
  122.             в том смысле - не важно - были в тесте ранее ожидания или нет - этот метод дождется ровно того,
  123.             что ему нужно
  124.             и выполнит действие
  125.         */
  126. ************************************************
  127. public static ExpectedCondition<Boolean> minimumSizeOf(final By elementsLocator, final int expectedSize){
  128.        ...
  129.  
  130.             public String toString(){
  131.                 return String.format("size of list " + elementsLocator + " to be: " + expectedSize + ". While actual size is " + listSize);
  132.             }
  133. /*
  134.      корректнее уточнить в фразе
  135.  
  136.      minimum size of ...
  137.  
  138.      size of list .... to be at least ...
  139.  
  140.      ну и напоминаю - есть такого плана стандартные кондишены
  141.      на практике их можно заюзать
  142.      мы тут тренировались)
  143. */
Advertisement
Add Comment
Please, Sign In to add comment