julia_v_iluhina

Untitled

Oct 6th, 2016
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.24 KB | None | 0 0
  1. Странно....
  2. в предыдущей версии  - ты давала линку на
  3. https://bitbucket.org/iakovenm/seleniumproject
  4.  
  5. а сейчас - на
  6. https://bitbucket.org/iakovenm/todomvctest/src/fb2ba0decac030a7376e2facebfb768867e36a63?at=master
  7.  
  8. /*
  9.     обрати внимание на pom.xml
  10.     мы уже работаем с чистым селениумом
  11.     нам не нужно подключенного в pom - selenide
  12.  
  13.     таким образом - чтобы не портить предыдущие селенидовские задания - лучше реализовывать эти работы
  14.     в другом проекте
  15.  
  16.     в следующий раз - приведи в порядок pom
  17.     не подключай лишнего и не подключай selenide - теперь это тоже лишнее
  18.  
  19.     также не вижу смысла держать в pom и коде - все что касается аллюра
  20.     этого не требуется в задании
  21.     и если не используешь - советую убрать
  22.     цель - получить как можно более полезный код не содержащий лишнего
  23.     чтобы разобраться - что конкретно нужно для реализации именно этой задачи
  24. */
  25. ***********************
  26. public class BaseTest {
  27.  
  28.     protected static WebDriver driver;
  29.  
  30.     @BeforeClass
  31.     public static void setup() {
  32.         Configuration.browser = System.getProperty("driver.browser");
  33.         driver = new ChromeDriver();
  34.     }
  35.     /*
  36.         посмотри - что такое Configuration.browser
  37.         это селенидовские настройки
  38.         мы ничего селенидовского подключать и использовать не будем
  39.  
  40.         работаем с селениумом
  41.  
  42.         тем более - ниже прописали явно - открываем хром драйвер )
  43.     */
  44.  
  45.     @After
  46.     public void tearDown() throws IOException {
  47.         screenshot();
  48.         driver.quit();
  49.         }
  50.  
  51.     @Attachment(type = "image/png")
  52.     public byte[] screenshot() throws IOException {
  53.         File screenshot = Screenshots.takeScreenShotAsFile();
  54.         return Files.toByteArray(screenshot);
  55.     }
  56. /*
  57.     возню со скриншотами я бы убрала
  58.     из соображений - описанных выше
  59. */
  60. *********************************************
  61. public class GoogleSearchTest extends BaseTest {
  62.  
  63.  
  64.     public static ExpectedCondition<Boolean> sizeOf(final By elementsLocator, final int expectedSize) {
  65.     /*
  66.         в целом все верно реализовала
  67.         не забудь еще реализовать toString() метод для этого кондишена
  68.  
  69.         в notes (см предыдущее задание)
  70.         есть пример
  71.  
  72.         такой метод нам нужен - т к если ждущая проверка падает -
  73.         то выдается сообщение
  74.         в которое входит и выражение из toString() кондишена
  75.         и очень удобно - если оно помогает понять - в чем тут дело
  76.  
  77.         это сообщение легко увидеть - в тест-методе вызови проверку этого кондишена
  78.         которая гарантированно не пройдет
  79.         тест упадет - и это сообщение будет выведено  - как часть сообщения об ошибке
  80.  
  81.         поскольку кондишен - вещь универсальная
  82.         давай разместим его в отдельном классе CustomConditions
  83.         а тут - в тест-методе - будем только использовать
  84.  
  85.         на самом деле есть и стандартный селениумский кондишен, который
  86.         делает то же
  87.         https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html
  88.         вот этот numberOfElementsToBe
  89.  
  90.         но у нас цель - поучиться писать кондишены
  91.         потому - мы написали свой и его будем использовать
  92.  
  93.         а в реальных проектах - разумнее в таких обчтоятельствах использовать уже существующие стандартные кондишены
  94.         и только если каких-то не хватает - их дореализовывать
  95.     */
  96.  
  97.     @Test
  98.     public void testSearchAndFollowLink() {
  99.  
  100.  
  101.         open("http://google.com/ncr");
  102.  
  103.         search("Selenium automates browsers");
  104.         assertCountResults(10);
  105.         assertNthResult(0, "Selenium automates browsers");
  106.  
  107.         followNthResult(0);
  108.         assertPageisLoaded("http://www.seleniumhq.org/");
  109.         /*
  110.             раз мы проверили урл  - нам нечего более уточнять
  111.             и так - точнее некуда)
  112.  
  113.             в селенидовской версии - до проверки урла (мы ее делали не ждущей проверкой)
  114.             мы встраивали ждущую проверку
  115.             чтоб гарантировать - что на момент проверки урда - уже текущий урл изменился
  116.  
  117.             теперь - мы используем сразу ждущую проверку
  118.             значит - ее достаточно
  119.  
  120.             единственное - я бы имя метода поменяла
  121.             на assertUrl(...) например)
  122.  
  123.         */
  124.         assertTrue(driver.findElement(By.cssSelector("#mainContent>h2")).getText().contains("What is Selenium?"));
  125.         /*
  126.             вот это убирай
  127.         */
  128.     }
  129. ****************************************************
  130.     @Step
  131.     public void search(String searchText) {
  132.         driver.findElement(By.cssSelector("div [name='q']")).sendKeys((searchText) + Keys.ENTER);
  133.         /*
  134.             тут тоже можно использовать By.name("q")
  135.             получится лаконичнее
  136.         */
  137.     }
  138. ***************************************************
  139.     @Step
  140.     public void assertNthResult(int index, String searchText) {
  141.         new WebDriverWait(driver, 6).until(
  142.                 textToBePresentInElementLocated(By.cssSelector(".srg .rc:nth-child(" + index + ")"), (searchText)));
  143.     }
  144. /*
  145.     .srg .rc - это ты в нескольких методах используешь
  146.     потому - вынеси этот селектор в переменную
  147.     и ее используй вместо .srg .rc
  148.  
  149.     http://joxi.ru/V2VBQLqf0bxpy2
  150.     http://joxi.ru/L210nzMu6E8e1m
  151.     http://joxi.ru/v29WjP9hG83EGr
  152.  
  153.     сравни результаты по приведенным селекторам
  154.  
  155.     выводы
  156.     нумерация в nth-child - с единицы
  157.     все же корректнее использовать .srg .g а не .srg .rc в качестве селектора для результатов поиска
  158.  
  159.     почему так - см http://www.w3schools.com/cssref/css_selectors.asp
  160.  
  161.     в прошлом ревью это подробнее рассматривали - почитай
  162.     и если вопросы останутся - давай обсудим в слек
  163.  
  164.     поскольку лучше оставить для index - нумерацию с нуля
  165.     чтобы мы вызывали assertNthResult(0, ...) - для самого первого элемента
  166.     то в качестве параметра в nth-child - передавай index+1
  167.  
  168. */
  169. *****************************************
  170. /*
  171.     Привожу ответ Якова  - почему лучше использовать нумерацию с нуля
  172.    
  173.     Зачем нумеровать с нуля, если более удобочитаемо с 1 начинать?
  174.    
  175.     воно то зручно… але не очевидно
  176.     залізе програміст якийсь в твій тест… і подумає що під 1 мається на зувазі 2гий елемент
  177.     в принципі якщо хочеш… можеш і “з 1" залишити…
  178.     але ти повинен розуміти що є сенс так робити тільки якщо всі в команді в тому числі і програмісти погодилися на це і сказали що ОК
  179.     при цьому… тобі треба бути переконаним що скрізь буде нумерація з 1
  180.     тобіш тобі треба створити наприклад врапер над іншими методами селеніума які працюють з індексами - щоб вони теж з 1 рахували :,)
  181.     інакше буде плутанина
  182.     по факту - простіше не плутатись і залишити рахунок з нуля
  183.    
  184.    
  185.         а для индекса элемента в коллекции/массиве - применяется именно термин  index
  186.         мы используя такой термин  - лишний раз подчеркнули - нумеруем с нуля
  187.    
  188.         лучше - быть понятнее для большинства
  189.         большинство в большинстве случаев столкнулось с нумерацией с нуля)
  190.         большинство увидело тот же термин -  index
  191.    
  192.         надеюсь, я тебя убедила
  193.         https://en.wikipedia.org/wiki/Zero-based_numbering
  194.         http://c2.com/cgi/wiki?ZeroAndOneBasedIndexes
  195.         http://stackoverflow.com/questions/24841172/why-is-array-indexing-in-java-start-w
  196. */
Advertisement
Add Comment
Please, Sign In to add comment