julia_v_iluhina

Untitled

Nov 6th, 2016
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.75 KB | None | 0 0
  1. public  class GoogleSearhTest {
  2.     @Test
  3.     public  void testGoogleSearh(){
  4.     /*
  5.         имя тест-метода - ничего не добавило к имени тест-класса
  6.         testSearchAndFollowLink - было бы лучше
  7.  
  8.         мы бы отразили - что мы проверяем
  9.         и не повторяли бы одно и то же
  10.     */
  11.         open("http://google.com/ncr");
  12.         /*
  13.             используй пропуски строк для того чтоб код воспринимался полегче
  14.         */
  15.         googleSearchField.sendKeys("Selenium automates browsers");
  16.         googleSearchField.pressEnter();
  17.         /*
  18.             можно было бы написать код в одну строчку
  19.             $(...).setValue(...).pressEnter();
  20.  
  21.             насчет того - нужна ли переменная
  22.             я бы не делала)
  23.             если бы делала - то делалал метод search(...)
  24.  
  25.             согласно задания - этого всего не требуется)
  26.         */
  27.         assertTrue(getResultNumber()>10);
  28.         /*
  29.             это сложно, не надежно и не точно
  30.  
  31.             просто, надежно и точно - проверить размер коллекции элементов
  32.             =результаты поиска
  33.             $$(...).shouldHave(size(...))
  34.  
  35.             shouldHave - ждущая проверка
  36.             это надежно
  37.             в отличие от assertTrue - не ждущей проверки
  38.             если в этот момент что-то не догрузилось на странице - то проверка упадет
  39.             т е - она упадет - не из-за ошибок, а из-за того, что мы чего-то не дождались
  40.  
  41.             такой вариант проверки - наглядный и с простой логикой на уровне тест-метода = простой
  42.  
  43.             насчет точности. То, что где-то написано - что результатов столько-то
  44.             еще не значит, что их столько)
  45.  
  46.             так что - точнее - проверить именно количество результатов
  47.  
  48.             результаты - http://joxi.ru/MAj1YoWsvn88v2
  49.             это вот такая коллекция
  50.             попробуй подобрать селектор
  51.             бывает, что результатов больше 10
  52.             как правило - в таких случаях есть еще какие-то рекламные результаты или советы
  53.             остальных результатов = 10
  54.             если их таки не 10 - покажи скриншот
  55.             возможно, что-то посоветую
  56.             ну или у меня будет картинка, иллюстрирующая исключение )
  57.  
  58.         */
  59.         firstResult.shouldHave(text("Selenium automates browsers"));
  60.         /*
  61.             в целом - верно)
  62.             но - незачем использовать переменную
  63.  
  64.             в каких случаях нужна переменная
  65.             https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#bookmark=id.4i6i27d7lwn4
  66.  
  67.             про то, как получить первый результат - ниже напишу
  68.         */
  69.         firstLink.click();
  70.         /*
  71.             тоже - тут нет причин использовать переменную
  72.  
  73.             и как получать главную линку первого результата - ниже напишу
  74.         */
  75.         System.out.println(title());
  76.         /*
  77.             это отладочное сообщение - убирай по финишу
  78.         */
  79.         assertTrue(title().contains("Selenium - Web Browser Automation"));
  80.         /*
  81.             assertTrue - не ждущая проверка
  82.  
  83.             нам надо дождаться - что страница загружена
  84.             и уже потом уточнять - что именно такая как надо страница загружена
  85.  
  86.             чтоб дождаться загрузки страницы - проверь какой-нибудь элемент на странице
  87.             что-нибудь похарактернее)
  88.             $(...).shouldHave(text("What is Selenium?"));
  89.  
  90.             а потом бы - советую сверить урл
  91.             а не тайтл
  92.             это будет максимально точно
  93.  
  94.             assertEquals - даст более наглядное сообщение в случае ошибки
  95.             http://junit.sourceforge.net/javadoc/org/junit/Assert.html#assertEquals(java.lang.Object, java.lang.Object)
  96.         */
  97.     }
  98.  
  99.     SelenideElement googleSearchField = $("#lst-ib");
  100.     /*
  101.         насчет селектора
  102.             можно нагляднее
  103.             обрати внимание на name этого же элемента
  104.             у очень многих продуктов google строка поиска именно такое имя имеет
  105.             от слова query
  106.             http://joxi.ru/823k1x0U6oavV2
  107.     */
  108.     static SelenideElement resultStats = $("#resultStats");
  109.     /*
  110.         это - просто не нужно
  111.     */
  112.     static SelenideElement firstResult = $(".st");
  113.     /*
  114.         писала тебе выше - что нам нужна коллекция элементов
  115.         результаты поиска
  116.        
  117.         и тогда первый результат = results.get(0)
  118.        
  119.         если нам нужно что-то из списка результатов
  120.         то будем отталкиваться от results
  121.         так будет и точнее, и нагляднее
  122.        
  123.         да и селекторов будет гораздо меньше
  124.        
  125.         кстати, уточняться до .st - и не нужно
  126.         ведь текст результата проверяем с помощью кондишена text
  127.         т е - что в текст элемента входит такой-то текст
  128.     */
  129.     static SelenideElement firstLink = $(".r>a");
  130.     /*
  131.         то же самое
  132.         отталкиваемся от results
  133.         получаем первый результат results.get(0)
  134.         и уже внутри него - получаем главную линку results.get(0).$(".r>a")
  135.     */
  136.  
  137.     public static int getResultNumber(){
  138.         String resultStatsValue = resultStats.getText().split(" ")[1];
  139.         int resultNumber = Integer.parseInt(resultStatsValue.replace(",",""));
  140.         System.out.println(resultNumber);
  141.         return resultNumber;
  142.     }
  143.     /*
  144.         когда у элемента получаем resultStats.getText() - тоже тут нету ожидания нужного нам текста
  145.        
  146.         вспомни - когда нам было нужно реализовать assertItemsLeft
  147.         как мы проверяли текст такого-то элемегта
  148.        
  149.         это просто по пути
  150.         нам не надо получать этот текст)
  151.        
  152.         работаем с коллекцией = результаты поиска
  153.     */
  154.  
  155. }
  156.  
  157. /*
  158.     что касается вынесения селекторов в переменые
  159.    
  160.     тут - тебе лишь переменная results  и нужна
  161.    
  162.     остальное - либо производные от results вещи
  163.     либо используются лишь раз
  164.    
  165.     если такой код кажется не наглядным или не удобным
  166.     то реализуй вспомогательные методы (прямо в тест-классе - т к потребности в пейдже пока нету - согласно задания)
  167.     и уже внутри методов - спрячешь селекторы
  168.     и код станет нагляднее
  169.    
  170.     это не обязательно
  171.    
  172.     но этот вариант - лучше по сравнению с вариантом - когда просто все локаторы вынесены в переменые
  173. */
Advertisement
Add Comment
Please, Sign In to add comment