julia_v_iluhina

Untitled

Sep 11th, 2016
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.86 KB | None | 0 0
  1. public static WebElement $(ExpectedCondition<WebElement> conditionToWaitParentElement, String innerElementCssSelector) {
  2. public static WebElement $(ExpectedCondition<WebElement> conditionToWaitParentElement, By innerElementLocator) {
  3. /*
  4.     лучше в $(ExpectedCondition<WebElement> conditionToWaitParentElement, String innerElementCssSelector)
  5.     использовать вызов $(ExpectedCondition<WebElement> conditionToWaitParentElement, By innerElementLocator)
  6.  
  7.     мы не много выиграем в лаконичности
  8.     но - таким образом мы лучше обеспечим - что оба метода работают одинаково
  9. */
  10. ********************************************
  11. public static ExpectedCondition<List<WebElement>> exactVisibleTexts(final By elementsLocator, final String... texts) {
  12.    ...
  13.             public String toString() {
  14.                 return String.format("Expected texts: %s, Actual texts: %s", Arrays.toString(texts), String.join(", ", actualTexts));
  15.             }
  16. /*
  17.     exactTextsOfVisible - предлагаю такое имя для кондишена, оно чуть точнее отражает суть происходящего
  18.     можно подробнее - exactTextsOfVisibleElements. Мне кажется - это уже лишнее
  19.  
  20.     в toString() - лучше следовать некой схеме
  21.  
  22.         ... list/element located by ...
  23.         т е  - указать  - про что речь - что проверяем
  24.         и уточнить локатор (что тоже важно)
  25.  
  26.         should ...
  27.         описываем expected
  28.  
  29.         while actual ...
  30.         описываем actual
  31.  
  32.     тут например
  33.  
  34.     exact texts of visible elements of list located by  __elementsLocator__
  35.     should be __Arrays.toString(texts)__
  36.     while actual are __String.join(", ", actualTexts)__
  37.  
  38.     касается и других кондишенов
  39. */
  40. **************************************************
  41.  public static ExpectedCondition<WebElement> listElementWithText(final By elementsLocator, final String taskText) {
  42.  /*
  43.     taskText - не очень подходящее имя для параметра универсального кондишена
  44.     просто text, expectedText - поточнее будет
  45.  
  46.     тут - выбирая имя для параметра кондишена - смотри на все кондишены
  47.     в аналогичных ситуациях - используй аналогичные термины
  48.  */
  49. ******************************************************
  50.    public static ExpectedCondition<WebElement> listElementWithText(final By elementsLocator, final String taskText) {
  51. ...
  52.                 actualTexts = getTexts(elements);
  53.                 for (WebElement element : elements) {
  54.                     actualText = element.getText();
  55.                     if (actualText.equals(taskText)) {
  56.                         return element;
  57.                     }
  58.                 }
  59. /*
  60.     taskText - не очень подходящее имя для параметра универсального кондишена
  61.  
  62.     мы получили тексты - вызов getTexts
  63.     и в следующем цикле - мы снова  получаем у элементов тексты
  64.  
  65.     экономнее будет - в этом цикле оперироватьранее полученными текстами
  66.     и возвращать elements.get(i) - если найден нужный элемент
  67.  
  68.     переискиваться тут ничего не будет - т к мы не оперируем лейзи прокси списком
  69.     так что - этой проблемы уже нет
  70.     получая elements.get(i) - ты получишь нужный тебе элемент
  71. */
  72. *********************************************************
  73.  public static ExpectedCondition<WebElement> exactText(final String elementsLocator, final String taskText) {
  74.  /*
  75.     taskText - не очень подходящее имя для параметра универсального кондишена
  76.  
  77.     логика у кондишена - как и у listElementWithText
  78.     лучше и тут остаться в тех же терсинах listElementWithExactText
  79.  
  80.     к реализации - аналогичные рекомендации
  81.  
  82.  */
  83. **********************************************************
  84. public static ExpectedCondition<WebElement> listElementWithClass(final By elementsLocator, final String elementsClass) {
  85.  
  86. ...
  87.                     if (element.getAttribute("class").contains(elementsClass)) {
  88. ...
  89.             public String toString() {
  90.                 return String.format("Element \nof %s \nto have class: %s\n, Actual class: %s", elementsLocator, elementsClass, String.join(", ", actualTexts));
  91.             }
  92. /*
  93.     elementsClass - лучше cssClass, так поточнее будет
  94.  
  95.     что касается условия element.getAttribute("class").contains
  96.     например - у элемента атрибут class содержит - "active editing"
  97.     а мы проверяем - есть ли класс edit
  98.     и посчитаем - что есть
  99.  
  100.     правильнее - разбить "active editing" на набор слов (разделитель = пробел)
  101.     и в случае если одно из слов равно искомому классу - мы нашли нужный элемент
  102.  
  103.     ну и про actualTexts
  104.     в данном случае - это и правда не нужная нам информация, как ты сама верно заметила
  105.     она не поможет нам - если мы будем анализировать такое сообщение об ошибке
  106.  
  107.     в toString - лучше вывести - как раз содержимое атрибута class - для всех элементов списка
  108. */
  109. ******************************************************
  110. // вот этому вроде и не место в пейдже, но если перенести в ConciseAPI - начинает почему-то глючить BaseTest
  111.     public static Actions act = new Actions(getDriver());
  112.     public static JavascriptExecutor js = (JavascriptExecutor) getDriver();
  113.  
  114.     public static void executeJavaScript(String JavaScript) {
  115.         js.executeScript(JavaScript);
  116.     }
  117. /*
  118.     это и правда нужно перенести в ConciseAPI
  119.  
  120.     не надо объявлять статические переменные act и js
  121.  
  122.     в executeJavaScript - выполняй ((JavascriptExecutor) getDriver()).executeScript(JavaScript);
  123.  
  124.     аналогично и для act
  125.     реализуй метод actions()
  126.     возвращающий new Actions(getDriver());
  127.  
  128.     проблем не должно быть
  129. */
  130. *******************************
  131.   public static void doubleClick(WebElement element) {
  132. /*
  133.     это тоже переноси в ConciseAPI
  134.     если используешь метод actions() - проблем не должно возникнуть
  135. */
  136. ***********************************************
  137.     public static void hover(WebElement element)
  138. /*
  139.     это тоже переноси в ConciseAPI
  140.     если используешь метод actions() - проблем не должно возникнуть
  141.  
  142.     build().perform() vs perform()
  143.     http://stackoverflow.com/questions/29071144/wbdriver-actions-build-perform
  144.     http://stackoverflow.com/questions/16435798/webdriver-actions-perform-or-actions-build-perform
  145.     http://www.ufthelp.com/2014/11/working-with-action-class-in-selenium.html
  146. */
  147. *****************************************************
  148. $(listElementWithText(tasks, taskText)...
  149. /*
  150.     корректнее для определения таски использовать кондишен listElementWithExactText
  151. */
  152. ***************************************************
  153.         $(....).clear();
  154.         $(...).sendKeys(taskTextEdited);
  155.         return $(...);
  156. /*
  157.     в ConciseAPI реализуй такой метод
  158.     WebElement setValue(WebElement element, String text)
  159. */
  160. ***************************************************
  161. public class BaseTest {
  162.  
  163.     static File pathBinary = new File("C:\\program files\\Mozilla Firefox\\firefox.exe");
  164.     static FirefoxBinary firefoxBinary = new FirefoxBinary(pathBinary);
  165.     static FirefoxProfile firefoxProfile = new FirefoxProfile();
  166.  
  167.     static {
  168.         setDriver(new FirefoxDriver(firefoxBinary, firefoxProfile));
  169.     }
  170.  
  171. /*
  172.    можно и так
  173.    уточнить - что за FirefoxDriver вызываем
  174.    уверена, что тебе недостаточно setDriver(new FirefoxDriver());  ?
  175. */
Advertisement
Add Comment
Please, Sign In to add comment