julia_v_iluhina

Untitled

Aug 29th, 2016
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.19 KB | None | 0 0
  1. https://drive.google.com/file/d/0B6K756MREjOpQVNsUFlhMXFSLVE/view
  2. https://github.com/ljubanka/Selenium_Based_Framework_Test_Suites
  3.  
  4.  public V apply(By locator) {
  5.         //Throwable lastError = null;
  6.         this.locator = locator;
  7.         try {
  8.             ....
  9.         }
  10.         catch (WebDriverException | IndexOutOfBoundsException e) {
  11.             //lastError = e;
  12.         }
  13.         return null;
  14.         //throw new TimeoutException(String.format("Timed out after ___ seconds waiting for %s", getClass().getSimpleName()), lastError);
  15.     }
  16. /*
  17.     таки я была не права
  18.     собственно, ты как раз про это и спросила
  19.  
  20.     ага, это я погорячилась))
  21.  
  22.     не стоило оно того - сюда try-catch переносить и работу с lastError
  23.     верни все же в WaitFor.until
  24.  
  25.     остальное на уровне предков кондишенов - все ок
  26. */
  27. ****************************************
  28.  
  29. public class ListNthElementHasText extends CollectionCondition {
  30.  ...
  31.     @Override
  32.     public String expected() {
  33.         return ("element #" + index + " = " + expectedText);
  34.     }
  35. /*
  36.     да, тут необычная ситуация )
  37.     надо вывести и индекс и текст
  38.  
  39.     я бы вывела  element[5]=fifth element
  40.  
  41.     этот кондишен - такой...
  42.     то ли свинка, то ли морская)
  43.  
  44.     потом мы его убъем)
  45.     у нас будет вариант elements.get(5).shouldHave(text("fifth element"))
  46.  
  47.     т е - будет достаточно для такой проверки кондишена для элемента - text
  48.  
  49.     на сейчас - все ок
  50. */
  51. *****************************************
  52.  
  53. public class Text extends ElementCondition {
  54.  
  55. /*
  56.     сравни код этого кондишена и ExactText
  57.  
  58.     отличается - одна строчка
  59.     if (actualText.....(expectedText))
  60.  
  61.     в Text - реализуй этот if (actualText.....(expectedText))
  62.     как отдельный метод checkElement
  63.  
  64.     отнаследуй  ExactText от Text
  65.     там тебе надо будет лишь перереализовать метод checkElement
  66.  
  67.     такой же фокус сможешь сделать для Size & MinimumSize, texts & exactTexts
  68. */
  69. *******************************************
  70.  
  71. public class Visible extends ElementCondition {
  72.  ...
  73.     @Override
  74.     public String expected() {
  75.         return "visible (true)";
  76.     }
  77.  
  78.     @Override
  79.     public String actual() {
  80.         return String.valueOf(isVisible);
  81.     }
  82.  
  83. }
  84. /*
  85.     реализовано ок)
  86.  
  87.     только к формулировкам вопрос
  88.  
  89.     вспомни - для чего мы это реализуем
  90.  
  91.     если в actual() - нам достаточно true or false
  92.  
  93.     то в expected() - нам будет достаточно true
  94. */
  95. *********************************************************
  96.  
  97. public class Mails {
  98.  
  99. //    public  static void assertMail(int index, String text) {
  100. //        assertThat(listNthElementHasText(emails, index, text));
  101. //    }
  102. //
  103. //    public static void assertMails(String... emailTexts) {
  104. //        assertThat(texts(emails, emailTexts));
  105. //    }
  106. /*
  107.     у тебя все есть для реализации этих проверок
  108. */
  109. ***************************************************
  110.  
  111. waitFor(byCSS(searchResults + ":first-child")).until(text("Selenium automates browsers"));
  112.  
  113. /*
  114.     ListNthElementHasText ?
  115.     примени)
  116. */
  117. ********************************************
  118.  
  119. то, что я спрашивала по visible: не понимаю, как добиться того, чтобы тест падал на выполнении этого кондишена.
  120. чтобфы увидеть текст ошибки типа "Timed out after 4 seconds waiting for element to be visible..."
  121. UPD(как ты и говорила, в процессе писания/работы некоторые вопросы решаются :-))
  122. запустила тест жмейла и проверяла другой кондишен, texts, а выпал эксепшн с красивыми словами о visible.
  123. Выпал, вероятно, потому что я отключила свой таймаут для жмейла, об этом будет дальше отдельный вопрос.
  124. В общем, вопрос с визибл как бы отпал, но буду рада, если есть какие-то четкие рекоммендации/комментарии
  125. /*
  126.     можно найти что-то не видимое и проверить на видимость)
  127.     можно не париться - а реализовать тестик для тудуэмвиси
  128.     открыли
  129.     гивенами заполнили - закомпличеную таску
  130.     перешли на фильтр эктив
  131.     у нас тут есть не видимая таска))
  132.  
  133.     а тут - ты права - тебе достаточно уменьшить таймаут до 4
  134.     кнопка COMPOSE в gmail не успеет))
  135. */
  136. *********************************************************
  137. запуталась с кондишеном present
  138. посмотрела в селениде, вроде как present - то же самое, что exist. а для exist реализация какая-то странная:
  139. public static final Condition exist = new Condition("exist") {
  140.     @Override
  141.     public boolean apply(WebElement element) {
  142.       element.isDisplayed(); //получаем статус элемента, но ничего с ним не делаем
  143.       return true;    //в любом случае возвращаем true?
  144.     }
  145.   };
  146.  
  147. правда, создался новый объект по такому конструктору:
  148. public Condition(String name) {
  149.     this(name, false);
  150.   }, т.е. как возвращается false, если условие не выполняется.... но непонятно до конца, как это работает
  151.  
  152. в случае с visible вроде понятно:
  153. public static final Condition visible = new Condition("visible") {
  154.     @Override
  155.     public boolean apply(WebElement element) {
  156.       return element.isDisplayed();
  157.     }
  158.   };
  159.  
  160. возвращаем значение состояния видимости элемента - или true, или false
  161.  
  162. /*
  163.     правильно аналогии провела с visible
  164.  
  165.     present = элемент нашелся = элемент не равен нулл
  166.  
  167.     заведи булевскую переменную isPresent
  168.     при проверке - заполни переменную  (элемент не равен нуллу)
  169.  
  170.     и уже - в actual - выводи isPresent
  171.  
  172.     оглягись на visible - я про actual & expected
  173. */
  174. ********************************************
  175.  
  176. ListNthElementHasText
  177. в старом варианте было так. что у нас есть список, находим i-й элемент, если текст есть,
  178. то возвращаем элемент, не сам список.... как сделать в нвом варианте - от кого наследовать этот класс,
  179. от ElementCOndition или CollectionCondition? мне кажется, от коллекции, тогда возвращать надо будет не тот
  180. конкретный элемент, а весь список
  181.  
  182. /*
  183.     вот это ты молодец
  184.     словила фишку)
  185.  
  186.     я писала тебе выше)
  187.     эту морскую свинку мы пристрелим)))
  188.     попозже
  189.  
  190.     а сейчас - грамотно поступила
  191. */
  192. *****************************************************
  193.  
  194. отлаживая тесты по gmail нашла такое: мы в какой-то момент вынесли установку таймаута кастомного в beforeclass:
  195. @BeforeClass
  196.     public static void setup() {
  197.         Configuration.timeout = 16;
  198.     }
  199.  
  200. и теперь у меня конфликт: выполняется этот BeforeClass вместо того, что указан в BaseTest.
  201. ожно просто использовать @Before, но есть ли еще варианты? (тоже погуглю, когда допишу задание :-))
  202. ......
  203. public class BaseTest {
  204.  
  205.     @BeforeClass
  206.     public static void setup() {
  207.         setWebDriver(new FirefoxDriver());
  208.     }
  209.  
  210.     @AfterClass
  211.     public static void finish() {
  212.         getWebDriver().quit();
  213.     }
  214.  
  215. }
  216. .....................
  217. public class GMailTest extends BaseTest {
  218.  
  219.     @Before
  220.     public void config() {
  221.         Configuration.timeout = 16;
  222.     }
  223.  
  224. /*
  225.     не вижу того, что ты описываешь
  226.  
  227.     в BaseTest - мы таймаута не настраиваем
  228.     что правильно
  229.  
  230.     а в GMailTest - как раз и надо его настраивать
  231.     только я бы делала в @BeforeClass
  232.  
  233.     @BeforeClass в предке и @BeforeClass в потомке - это ок
  234.     сначала вызывается @BeforeClass предка
  235.     потом - потомка
  236.     тут все ок)
  237.     вот если в рамках одного класса будет несколько @BeforeClass-методов
  238.     то какой порядок вызовов будет  - не понятно
  239.  
  240.     http://junit.sourceforge.net/javadoc/org/junit/BeforeClass.html
  241.     тут написано про это (про порядок вызовов @BeforeClass предка и потомков)
  242.  
  243. */
  244. **********************************************
  245.  
  246. /*
  247.     вот это доделывай
  248.     закрепляй версию в бренче отдельном
  249.  
  250.     дальше - следующий этап
  251.     читай в том же документе
  252.     ориентируйся на заголовок Base (Gmail)
  253.    
  254. */
Advertisement
Add Comment
Please, Sign In to add comment