julia_v_iluhina

Untitled

Oct 6th, 2016
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.72 KB | None | 0 0
  1. <dependencies>
  2.     <dependency>
  3.         <groupId>junit</groupId>
  4.         <artifactId>junit</artifactId>
  5.         <version>4.12</version>
  6.     </dependency>
  7.  
  8.     <dependency>
  9.         <groupId>org.seleniumhq.selenium</groupId>
  10.         <artifactId>selenium-java</artifactId>
  11.         <version>2.53.1</version>
  12.     </dependency>
  13. </dependencies>
  14.  
  15. /*
  16.     <dependencies> - можно уже 2.53.1 селениум использовать
  17.     <build> - вполне ок будет и без этой секции
  18.     попробуй убрать, я не понимаю - зачем тебе эта секция
  19.  
  20.     расскажи - зачем )
  21.     или - убери лишнее
  22. */
  23. ************************
  24.  
  25. public class BaseTest {
  26.  
  27.     protected static WebDriver driver;
  28.     protected static WebDriverWait wait;
  29.  
  30.  
  31.     @BeforeClass
  32.     public static void setup() {
  33.         driver = new ChromeDriver();
  34.         wait = new WebDriverWait(driver, 6);
  35.     }
  36.  
  37.     @After
  38.     public void tearDown() {
  39.         driver.quit();
  40.     }
  41. }
  42. /*
  43.     пока у нас один тест-метод - мы этой проблемы не увидим
  44.     но она есть)
  45.     на 2-ух и более тест-методах в одном тест-классе - проявится
  46. */
  47.   /*
  48.  
  49.     вот это + закрытие вебдрайвера - действительно, как раз то, что стоит разместить в предке тест-класса
  50.  
  51.             т к  - речь об общей логике тест-класса в целом -
  52.                 когда и какой вебдрайвер открыть,
  53.                 когда его закрыть (это тоже в этом классе должно быть)
  54.  
  55.                 с каким таймаутом ждать - ну, тоже можно в предке тест-класса это разместить
  56.                 хотя... уже это спорно)
  57.                 на самом деле - задание таймаута - это уже детали реализации самого тест-класса
  58.                 и из этих соображений - можно было бы это делать уже в тест-классе
  59.  
  60.             когда открывать и закрывать вебдрайвер
  61.                   сейчас открытие вебдрайвера происходит в @BeforeClass-методе
  62.                   это значит - что это будет выполняться единожды перед запуском всех тест-методов
  63.                   соотвественно - и закрывать надо в таком случае - после того, как все тест-методы отработают -
  64.                   в AfterClass-методе (а не как сейчас - в After-методе)
  65.  
  66.                     для варианта - свой вебдрайвер для каждого тест-метода
  67.                         открывать можно
  68.                             при инициализации не статической переменной
  69.                             instance initialization block
  70.                             Before метод
  71.                         закрывать
  72.                             After метод
  73.  
  74.                     а для варианта - один вебдрайвер на все тест-методы одного класса
  75.                     (такой вариант подходит, если все тесты запускать в одном потоке - как мы до этого и делали)
  76.                         открывать можно
  77.                            при инициализации статической переменной
  78.                            static initialization block
  79.                            BeforeClass метод
  80.                         закрывать
  81.                            AfterClass метод
  82.  
  83.                     какой вариант выбрать - зависит от обстоятельств
  84.                     просто - важно понимать разницу и выбирать наиболее подходящий в данном случае
  85.                     ну и - вариант создания вебдрайвера должен соответствовать варианту его закрытия
  86.  
  87.             Полезные линки
  88.             http://www.javamadesoeasy.com/2015/06/differences-between-instance.html
  89.             http://stackoverflow.com/questions/15493189/beforeclass-vs-static
  90.  
  91.             Получим более содержательное сообщение об ошибке - если работаем с аннотированными методами
  92.             http://www.unknownerror.org/opensource/junit-team/junit/q/stackoverflow/512184/best-practice-initialize-junit-class-fields-in-setup-or-at-declaration
  93.             http://www.javaworld.com/article/2076265/testing-debugging/junit-best-practices.html
  94.             (подзаголовок Do not use the test-case constructor to set up a test case)
  95.     */
  96. ***********************************
  97. public static ExpectedCondition<Boolean> sizeOf(final By elementsLocator, final int expectedSize) {
  98. /*
  99.     ок реализовала
  100.     учти еще из предыдущего ревью строки 81-83
  101. */
  102. ***************************************
  103. public static String searchResults = ".srg .rc";
  104. /*
  105.     не послушала ты меня)
  106.     тут больше подойдет ".srg .g"
  107.     иначе - будут проблемы с использованием nth-child
  108.  
  109.     посмотри еще раз строки 145-166 прошлого ревью
  110. */
  111. ***************************************
  112. assertNthResult(0, "Selenium automates browsers");
  113.  
  114. public void assertNthResult(int index, String searchText) {
  115.         wait.until(
  116.                 textToBePresentInElementLocated(By.cssSelector("(" + searchResults + "):nth-child(" + index + ")"), searchText));
  117. }
  118.  
  119. /*
  120.     вызов assertNthResult(0, "Selenium automates browsers"); - ок
  121.  
  122.     только - когда мы формируем селектор - нужен не нолик, а единичка
  123.     ну и ".srg .g", а не ".srg .rc"
  124.     посмотри на картинки и линки в прошлом ревью про это
  125.  
  126.     формируя селектор, используй
  127.     не By.cssSelector("(" + searchResults + "):nth-child(" + index + ")"
  128.     а  By.cssSelector("(" + searchResults + "):nth-child(" + (index+1) + ")"
  129.  
  130. */
Advertisement
Add Comment
Please, Sign In to add comment