julia_v_iluhina

Untitled

Jul 24th, 2016
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.05 KB | None | 0 0
  1. package helpers;
  2. /*
  3.     тут можно назвать пекедж - core
  4.     т к тут - будут новые Conditions = универсальные вещи, которые можно переиспользовать и далее
  5. */
  6. ...
  7.  
  8. public class CustomConditions {
  9. /*
  10.     смесь бульдога с носорогом получилась)
  11.     то ли контейнер для новых кондишенов, то ли предок для тест-класса, то ли пейдж
  12.  
  13.     тоже будет полезным разобраться - в свете последующих работ)
  14.  
  15.     понимаю желание разгрузить тест-класс по максимуму
  16.     пока - вынесем только и только статические методы - реализации кондишенов
  17. */
  18.  
  19.     public static WebDriver driver = new FirefoxDriver();
  20.     public static WebDriverWait wait = new WebDriverWait(CustomConditions.driver, 6);
  21.     /*
  22.         старайся придерживаться правила - где объект создала - там его и убей)
  23.         сейчас - вебдрайвер создается тут
  24.         а убъем мы его в тест-классе
  25.         не)
  26.         так очень легко сделать ошибку - не убить/создать не вовремя/убить не вовремя и прочая-прочая
  27.         для такого разрывания - в одном месте создали, в другом - убили - должны быть очень веские причины
  28.         если их нет - не надо так делать)
  29.         очень увеличиваешь вероятность ошибок
  30.         да и код становится слишком загадочным)
  31.  
  32.         логика пока такая
  33.         где нам нужен объект-вебдрайвер
  34.         в тест-классе - на протяжении работы всех его тест-методов
  35.         раз это логика тест-класса - то создание-убиение вебдрайвера - дело либо самого тест-класса либо его предка
  36.         до кучи - и вот эта переменная wait - пусть они рядом будут
  37.     */
  38.  
  39.     public static void search(String text){
  40.         driver.findElement(By.name("q")).clear();
  41.         driver.findElement(By.name("q")).sendKeys(text + Keys.ENTER);
  42.  
  43.     }
  44.     /*
  45.         это - мы бы реализовали в пейжде
  46.         если бы его делали)
  47.        
  48.         по заданию - мы его не делаем
  49.         пока оставь в тест-классе
  50.     */
  51.  
  52.     public static ExpectedCondition<Boolean> sizeOf(final By elementsLocator, final int expectedSize){
  53.         /*
  54.             только это и должно остаться в этом классе
  55.            
  56.             буквально в следующем задании - тебе понадобится новый кондишен
  57.             в этом же классе его и расположишь
  58.         */
  59.  
  60.  
  61.     public static void followLink(int index){
  62.         /*
  63.             это - метод-шаг, метод-действие
  64.             такое мы выносили в пейджа
  65.             пока - делаем без пейджей
  66.             размести этот метод в тест-классе
  67.         */
  68.         List<WebElement> elements = driver.findElements(By.cssSelector(".srg .g"));
  69.         elements.get(index);
  70.         /*
  71.             читаем код
  72.             получили список элементов
  73.             из него - получили элемент = такой-то элемент списка
  74.             но - ничего с ним не делаем - дальше мы не работаем с полученным таким способом элементом
  75.         */
  76.         driver.findElement(By.cssSelector(" .r>a")).click();
  77.         /*
  78.             а тут - мы просто получаем элемент по селектору " .r>a" и кликаем на нем
  79.  
  80.             если тебе "повезет" так же как и мне - это вообще не будет главной линкой нулевого результата
  81.             сравни
  82.             http://joxi.ru/nAyqEx7HX0x4JA и http://joxi.ru/Dr860ybhkaGde2
  83.            
  84.             в селекторе " .r>a" - самый левый пробел - бесполезен
  85.             пробел что значит - что ты ищешь что-то(в селекторе справа пробела) внутри чего-то(в селекторе слева пробела)
  86.  
  87.             верно - что получила внутри метода список элементов по селектору -
  88.             (заранее объявить и использовать - можно только лейзи-прокси списки элементов или элементы
  89.             а мы работаем без пейджеи - и соотвественно - без лейзи прокси
  90.             потому - сами должны заботиться  - чтобы получить элемент тогда, когда он есть
  91.             вызываем мы этот метод уже после того - как проверили что результатов столько-то и текств таком-то результате = такой-то
  92.             т е в момент - когда у нас уже гарантированно есть этот искомый элемент списка
  93.             самое время заново получить список и найти в нем нужный нам элемент - он как раз есть)
  94.            
  95.             верно - что из полученного списка получила такой-то элемент
  96.             теперь - надо у этого элемента получить подчиненный элемент с селектором ".r>a"
  97.             и кликнуть на него
  98.  
  99.             можно записать это одной строкой и не используя дополнительных переменных
  100.             но это уже как заработает код - собери
  101.  
  102.         */
  103. *******************************************************
  104. public class GoogleTest {
  105.  
  106.     @AfterClass
  107.     public static void tearDown() {
  108.         driver.quit();
  109.     }
  110.     /*
  111.         вот я про это)
  112.         раз тут  - в тест-классе - убиваем -
  113.         то тут - и создадим
  114.     */
  115.  
  116.     @Test
  117.     public void testSearchAndFollowLink() {
  118.  
  119.         driver.get("http://google.com/ncr");
  120.  
  121.         search("Selenium automates browsers");
  122.  
  123.         wait.until(sizeOf(By.cssSelector(".srg .g"), 10));
  124.         /*
  125.             ".srg .g" - используешь несколько раз
  126.             заведи строковую переменную (тут же  - в тест-классе)
  127.             для этого селектора
  128.             и далее используй   
  129.         */
  130.         wait.until(
  131.                 textToBePresentInElementLocated(By.cssSelector(".srg .g:first-of-type"), "Selenium automates browsers"));
  132.         /*
  133.             тут - тоже сможешь эту же переменную - селектор ".srg .g" - использовать
  134.             по возможности - будем DRY
  135.         */
  136.  
  137.         followLink(0);
  138.  
  139.         wait.until(
  140.                 textToBePresentInElementLocated(By.cssSelector(".homepage"), "What is Selenium?"));
  141.         urlContains("http://www.seleniumhq.org/");
  142.         /*
  143.             urlContains - это селениумский кондишен
  144.             и ты можешь его применять в ждущей проверке wait.until как параметр
  145.  
  146.             в таком как сейчас варианте - в последней строке мы ничего не проверяем
  147.             просто получили значение типа контишен и усе)
  148.             а проверку текста "What is Selenium?" - можно будет уже и не делать)
  149.             т к мы сразу можем ждущей проверкой урл проверить
  150.         */
  151.     }
  152. }
Advertisement
Add Comment
Please, Sign In to add comment