julia_v_iluhina

Untitled

Jan 17th, 2017
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 13.28 KB | None | 0 0
  1. http://joxi.ru/gmvqJvkHLqgVxr
  2. /*
  3.     примени getTexts
  4. */
  5. ***********************************
  6.  public static ExpectedCondition<WebElement> conditionToWaitParentElement(final By locator, final String text) {
  7. /*
  8.     зачем этот кондишен?
  9. */
  10. *********************************************
  11.  public static ExpectedCondition<List<WebElement>> exactTextsOf(final By elementsLocator, final String... texts) {
  12.         if (texts.length == 0) {
  13.             throw new IllegalArgumentException("Array of expected texts is empty.");
  14.         }
  15.  
  16.         return elementExceptionsCatcher(new ExpectedCondition<List<WebElement>>() {
  17.             List<String> actualTexts;
  18.  
  19.             public List<WebElement> apply(WebDriver driver) {
  20.  
  21.                 actualTexts = new ArrayList<String>();
  22.                 /*
  23.                     ниже - есть вызов actualTexts = getTexts(elements);
  24.                     в методе getTexts - инициализация списка тоже происходит
  25.                     так что убирай эту строку - actualTexts = new ArrayList<String>();
  26.                 */
  27.                 List<WebElement> elements = driver.findElements(elementsLocator);
  28.                 actualTexts = getTexts(elements);
  29. *******************************************************************************
  30.  public static ExpectedCondition<List<WebElement>> exactTextsOfVisible(final By elementsLocator, final String... texts) {
  31.         if (texts.length == 0) {
  32.             throw new IllegalArgumentException("Array of expected texts is empty.");
  33.         }
  34.  
  35.         return elementExceptionsCatcher(new ExpectedCondition<List<WebElement>>() {
  36.             List<String> actualTexts;
  37.  
  38.             public List<WebElement> apply(WebDriver driver) {
  39.                 List<WebElement> elements = driver.findElements(elementsLocator);
  40.                 List<WebElement> visibleElements = getVisibleElements(elements);
  41.                 actualTexts = getTexts(visibleElements);
  42.                 /*
  43.                     отличное начало)
  44.                     а вот дальше - зачем после того как тексты получили
  45.                     заново добавляем тексты элементов в список?
  46.                     цикл ниже - явно лишний теперь
  47.                     ведь это и так делается в getTexts
  48.                 */
  49.                 for (WebElement element : visibleElements) {
  50.                     actualTexts.add(element.getText());
  51.                 }
  52. ....
  53.             public String toString() {
  54.                 return "texts of list located" + elementsLocator + "\n should equals :      " + Arrays.toString(texts) + "\n actual texts are    " + actualTexts;
  55.             }
  56. /*
  57.     в toString() уточни - про фильтрацию по visible
  58.     texts of visible elements of list located ...
  59. */
  60. *****************************************************************
  61.     public static ExpectedCondition<List<WebElement>> sizeOf(final By elementsLocator, final int expectedSize) {
  62. ....
  63.             public String toString() {
  64.                 return String.format("\nsize of list should be equals", expectedSize, "%s\n while actual size is: %s\n", listSize);
  65.             }
  66. /*
  67.     что написано в toString() кондишена - это важно
  68.     это то - что ты увидишь в случае ошибки
  69.  
  70.     эта фраза должна быть точной, полезной и не сложной
  71.  
  72.     не сложной она будет - если ты будешь всегда одной схемы придерживаться
  73.     я не перестану про это напоминать)
  74.  
  75.     Size of list located ...
  76.     should be ...
  77.     while actual size is ...
  78. */
  79. ***************************************
  80.     public static ExpectedCondition<List<WebElement>> sizeOfVisible(final By elementsLocator, final int expectedSize) {
  81.  
  82.         return new ExpectedCondition<List<WebElement>>() {
  83.             private int listSize;
  84.             private List<WebElement> elements;
  85.  
  86.             public List<WebElement> apply(WebDriver driver) {
  87.                 elements = driver.findElements(elementsLocator);
  88.                 for (WebElement element : elements) {
  89.                     if (element.isDisplayed()) {
  90.                         return elements;
  91.                     }
  92.                 }
  93.                 /*
  94.                     читай код выше
  95.  
  96.                     что мы делаем
  97.  
  98.                     получили элементы списка
  99.                     начали их обходить
  100.                     и если элемент видим - то все ок
  101.                     кондишен прошел
  102.  
  103.                     вопрос - мы вообще что собирались проверять?
  104.  
  105.                     у нас цель - проверить что видимых элементов в списке = столько-то
  106.  
  107.                     значит
  108.                     надо сначала - получить список видимых элементов
  109.                     и потом у него проверять размер
  110.                 */
  111.  
  112.                 for (WebElement element : elements) {
  113.                     if (listSize == elements.size()) {
  114.                         return elements;
  115.                     }
  116.                 }
  117.                 /*
  118.                     вопрос - а надо нам обходить список в цикле
  119.                     чтоб его размер проверить?
  120.  
  121.                     посмотри на уже отлаженный кондишен sizeOf
  122.                     с ним все ок
  123.                 */
  124. *************************************
  125.     public static ExpectedCondition<WebElement> elementWithCssClass(final By elementsLocator, final String cssClass) {
  126.         return elementExceptionsCatcher(new ExpectedCondition<WebElement>() {
  127.             List<String> actualClasses;
  128.  
  129.             public WebElement apply(WebDriver driver) {
  130.                 List<WebElement> elements = driver.findElements(elementsLocator);
  131.                 for (WebElement element : elements) {
  132.                     actualClasses.add(element.getAttribute("class"));
  133.                     actualClasses = new ArrayList<String>();
  134.                     /*
  135.                         сначала = добавил новую строку в список actualClasses
  136.                         а потом - заново инициализировал actualClasses
  137.                         для чего делать actualClasses = new ArrayList<String>();?
  138.  
  139.                         actualClasses.add(element.getAttribute("class")); - это ок
  140.                         только перед циклом - нужно инициализировать этот список
  141.                     */
  142.                     for (java.lang.String String : actualClasses) {
  143.                     /*
  144.                         в данный момент - список actualClasses - пуст
  145.                         из-за предыдущей строки
  146.  
  147.  
  148.                         упрости код
  149.                         первый цикл
  150.                         обходишь вписок элементов
  151.                         и собираешь actualClasses = список строк = значений атрибута "class"
  152.  
  153.                         следующий цикл (не вложенный, просто следующий)
  154. */
  155.                         for (int i = 0; i < actualClasses.size(); i++) {
  156.                             //обходишь список actualClasses
  157.                             //и внутри цикла - разбираешь строку на слова и ее анализируешь
  158.                             String actualClass = actualClasses.get(i); //получили то что у i-го элемента в атрибуте class
  159.                             String[] actualCssClasses = actualClass.split("\\s"); //разобрали на массив слов это
  160.  
  161.                             for(int j = 0; j < actualCssClasses.length; j++) { //обходим этот массив слов
  162.                                 if (cssClass.equals(actualCssClasses[j])) { //и если нашли класс = переданному в кондишен классу
  163.                                     return elements.get(i); //то знач - i-ый вебэлемент - нам подходит, возвращаем его
  164.                                 }
  165.                             }
  166.                          }
  167.                          return null; //а если оббежали весь список actualClasses и не нашли ничего подходящего
  168.                          //значит нет такого элемента в списке - с нужным нам классом
  169.                          //вот нулл и возвращаем
  170.                     */
  171. ******************************************************
  172. /*
  173.     сравни предложенный код с твоим
  174.     обрати внимание на работу с методом split
  175.     вариант  actualClass.split(" "); - тоже рабочий должен быть
  176.  
  177.     отлаживай код
  178.     на уровне работы с кондишенами - это уже необходимо
  179.  
  180.     как писала ранее
  181.     работа с кондишеном считается законченной если
  182.     в заведомо верной ситуации - проверка кондишена проходит
  183.     в заведомо неверной ситуации - проверка кондишена не проходит и сообщение об ошибке - верное
  184. */
  185. ****************************************************
  186.     public static ExpectedCondition<WebElement> elementWithText(final By elementsLocator, final String exactText) {
  187.  
  188.         return elementExceptionsCatcher(new ExpectedCondition<WebElement>() {
  189.             List<String> actualTexts;
  190.             private int index;
  191.  
  192.             public WebElement apply(WebDriver driver) {
  193.  
  194.                 actualTexts = new ArrayList<String>();
  195.                 /*
  196.                     читаем код
  197.                     инициализировал список строк
  198.                 */
  199.                 List<WebElement> elements = driver.findElements(elementsLocator);
  200.                 /*
  201.                     получил список вебэлементов
  202.                 */
  203.                 for (WebElement element : elements) {
  204.                 /*
  205.                     обходишь список вебэлементов
  206.                 */
  207.                     getTexts(elements);
  208.                 /*
  209.                     и на каждой итерации этого цикла
  210.                     получаешь все тексты элементов
  211.                     причем - результат этого метода не присваиваешь никакой переменной
  212.                    
  213.                     например для списка в 10 элементов
  214.                     10 раз будут получены тексты этих 10 элементов
  215.                     но результатами этой работы - мы не воспользовались ни разу
  216.                 */    
  217.                     if (actualTexts.equals(exactText)) {
  218.                     /*
  219.                         в таком случае - actualTexts - всегда пустой список
  220.                         ведь мы его не наполнили
  221.                        
  222.                         и даже если бы наполнили
  223.                         то сравнивали бы - список actualTexts и строку exactText
  224.                         это не может быть равно друг другу ну никак
  225.                     */
  226. ...
  227. /*
  228.     а что нам нужно сделать
  229. */
  230. List<WebElement> elements = driver.findElements(elementsLocator); //получили список вебэлементов
  231. actualTexts = getTexts(elements); //получили их тексты
  232. for(int i = 0; i < actualTexts.size(); i++) { //обходим тексты элементов
  233.     if (actualTexts.get(i).equals(exactText)) { //если текст i-го элемента равен exactText
  234.         return elements.get(i); //то возвращаем этот i-ый элемент
  235.     }
  236. }
  237. return null; //а если обошли все тексты и не нашли соответствующий - значит подходящего элемента нет и возвращаем нулл    
  238. ***************************************************************    
  239.             public String toString() {
  240.                 return "List  of elements located" + elementsLocator + "\n should have exact text :      " + exactText + "\n while actual texts are    " + actualTexts;
  241.             }
  242. /*
  243.     should have element with exact text
  244. */
Advertisement
Add Comment
Please, Sign In to add comment