Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- https://drive.google.com/file/d/0B6K756MREjOpQVNsUFlhMXFSLVE/view
- https://github.com/ljubanka/Selenium_Based_Framework_Test_Suites
- public V apply(By locator) {
- //Throwable lastError = null;
- this.locator = locator;
- try {
- ....
- }
- catch (WebDriverException | IndexOutOfBoundsException e) {
- //lastError = e;
- }
- return null;
- //throw new TimeoutException(String.format("Timed out after ___ seconds waiting for %s", getClass().getSimpleName()), lastError);
- }
- /*
- таки я была не права
- собственно, ты как раз про это и спросила
- ага, это я погорячилась))
- не стоило оно того - сюда try-catch переносить и работу с lastError
- верни все же в WaitFor.until
- остальное на уровне предков кондишенов - все ок
- */
- ****************************************
- public class ListNthElementHasText extends CollectionCondition {
- ...
- @Override
- public String expected() {
- return ("element #" + index + " = " + expectedText);
- }
- /*
- да, тут необычная ситуация )
- надо вывести и индекс и текст
- я бы вывела element[5]=fifth element
- этот кондишен - такой...
- то ли свинка, то ли морская)
- потом мы его убъем)
- у нас будет вариант elements.get(5).shouldHave(text("fifth element"))
- т е - будет достаточно для такой проверки кондишена для элемента - text
- на сейчас - все ок
- */
- *****************************************
- public class Text extends ElementCondition {
- /*
- сравни код этого кондишена и ExactText
- отличается - одна строчка
- if (actualText.....(expectedText))
- в Text - реализуй этот if (actualText.....(expectedText))
- как отдельный метод checkElement
- отнаследуй ExactText от Text
- там тебе надо будет лишь перереализовать метод checkElement
- такой же фокус сможешь сделать для Size & MinimumSize, texts & exactTexts
- */
- *******************************************
- public class Visible extends ElementCondition {
- ...
- @Override
- public String expected() {
- return "visible (true)";
- }
- @Override
- public String actual() {
- return String.valueOf(isVisible);
- }
- }
- /*
- реализовано ок)
- только к формулировкам вопрос
- вспомни - для чего мы это реализуем
- если в actual() - нам достаточно true or false
- то в expected() - нам будет достаточно true
- */
- *********************************************************
- public class Mails {
- // public static void assertMail(int index, String text) {
- // assertThat(listNthElementHasText(emails, index, text));
- // }
- //
- // public static void assertMails(String... emailTexts) {
- // assertThat(texts(emails, emailTexts));
- // }
- /*
- у тебя все есть для реализации этих проверок
- */
- ***************************************************
- waitFor(byCSS(searchResults + ":first-child")).until(text("Selenium automates browsers"));
- /*
- ListNthElementHasText ?
- примени)
- */
- ********************************************
- то, что я спрашивала по visible: не понимаю, как добиться того, чтобы тест падал на выполнении этого кондишена.
- чтобфы увидеть текст ошибки типа "Timed out after 4 seconds waiting for element to be visible..."
- UPD(как ты и говорила, в процессе писания/работы некоторые вопросы решаются :-))
- запустила тест жмейла и проверяла другой кондишен, texts, а выпал эксепшн с красивыми словами о visible.
- Выпал, вероятно, потому что я отключила свой таймаут для жмейла, об этом будет дальше отдельный вопрос.
- В общем, вопрос с визибл как бы отпал, но буду рада, если есть какие-то четкие рекоммендации/комментарии
- /*
- можно найти что-то не видимое и проверить на видимость)
- можно не париться - а реализовать тестик для тудуэмвиси
- открыли
- гивенами заполнили - закомпличеную таску
- перешли на фильтр эктив
- у нас тут есть не видимая таска))
- а тут - ты права - тебе достаточно уменьшить таймаут до 4
- кнопка COMPOSE в gmail не успеет))
- */
- *********************************************************
- запуталась с кондишеном present
- посмотрела в селениде, вроде как present - то же самое, что exist. а для exist реализация какая-то странная:
- public static final Condition exist = new Condition("exist") {
- @Override
- public boolean apply(WebElement element) {
- element.isDisplayed(); //получаем статус элемента, но ничего с ним не делаем
- return true; //в любом случае возвращаем true?
- }
- };
- правда, создался новый объект по такому конструктору:
- public Condition(String name) {
- this(name, false);
- }, т.е. как возвращается false, если условие не выполняется.... но непонятно до конца, как это работает
- в случае с visible вроде понятно:
- public static final Condition visible = new Condition("visible") {
- @Override
- public boolean apply(WebElement element) {
- return element.isDisplayed();
- }
- };
- возвращаем значение состояния видимости элемента - или true, или false
- /*
- правильно аналогии провела с visible
- present = элемент нашелся = элемент не равен нулл
- заведи булевскую переменную isPresent
- при проверке - заполни переменную (элемент не равен нуллу)
- и уже - в actual - выводи isPresent
- оглягись на visible - я про actual & expected
- */
- ********************************************
- ListNthElementHasText
- в старом варианте было так. что у нас есть список, находим i-й элемент, если текст есть,
- то возвращаем элемент, не сам список.... как сделать в нвом варианте - от кого наследовать этот класс,
- от ElementCOndition или CollectionCondition? мне кажется, от коллекции, тогда возвращать надо будет не тот
- конкретный элемент, а весь список
- /*
- вот это ты молодец
- словила фишку)
- я писала тебе выше)
- эту морскую свинку мы пристрелим)))
- попозже
- а сейчас - грамотно поступила
- */
- *****************************************************
- отлаживая тесты по gmail нашла такое: мы в какой-то момент вынесли установку таймаута кастомного в beforeclass:
- @BeforeClass
- public static void setup() {
- Configuration.timeout = 16;
- }
- и теперь у меня конфликт: выполняется этот BeforeClass вместо того, что указан в BaseTest.
- ожно просто использовать @Before, но есть ли еще варианты? (тоже погуглю, когда допишу задание :-))
- ......
- public class BaseTest {
- @BeforeClass
- public static void setup() {
- setWebDriver(new FirefoxDriver());
- }
- @AfterClass
- public static void finish() {
- getWebDriver().quit();
- }
- }
- .....................
- public class GMailTest extends BaseTest {
- @Before
- public void config() {
- Configuration.timeout = 16;
- }
- /*
- не вижу того, что ты описываешь
- в BaseTest - мы таймаута не настраиваем
- что правильно
- а в GMailTest - как раз и надо его настраивать
- только я бы делала в @BeforeClass
- @BeforeClass в предке и @BeforeClass в потомке - это ок
- сначала вызывается @BeforeClass предка
- потом - потомка
- тут все ок)
- вот если в рамках одного класса будет несколько @BeforeClass-методов
- то какой порядок вызовов будет - не понятно
- http://junit.sourceforge.net/javadoc/org/junit/BeforeClass.html
- тут написано про это (про порядок вызовов @BeforeClass предка и потомков)
- */
- **********************************************
- /*
- вот это доделывай
- закрепляй версию в бренче отдельном
- дальше - следующий этап
- читай в том же документе
- ориентируйся на заголовок Base (Gmail)
- */
Advertisement
Add Comment
Please, Sign In to add comment