Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class GoogleMailPage {
- /*
- Судя по реализации - это пейдж-модуль
- а почему имя класса у пейджа - как для пейджа-объекта?
- Посмотри на комментарии к работе по пейлдам-модулям и тут это поправь
- */
- static SelenideElement composeButton = $(byText("COMPOSE"));
- /*
- Нам эта кнопка нужна только для того, чтоб реализовать sendMail
- значит - можно обойтись без такой переменой
- */
- public static void mailLogin(String email, String passwd){
- /*
- passwd - избегай сокращений
- общепринятые употреблять - это ок
- тут корректнее - password
- */
- public static void assertComposeButton() {
- /*
- а для чего нам такой метод?
- особенно с учетом того - как мы нашли эту кнопку)
- мы ее нашли по такому-то тексту
- и проверили ей текст)
- на самом деле - если тест без этой проверки у тебя не работал - это значит тебе не хватило таймаута
- в условии задания
- Gmail loads pretty long time… You can increase selenide timeouts used in “shoulds”
- E.g.: Configuration.timeout = 15000;
- мне с моим аккаунтом понадобилось больше - 20-25 секунд
- ведь мы в sendMail - начинаем с клика на этой кнопке
- клик по элементу в Selenide - ждет видимости элемента
- в рамках таймаута
- так что - увеличь таймаут - и будет ок без assertComposeButton()
- сейчас assertComposeButton() - выполняет функцию дополнительных тормозоа
- таймаутом это регулировать грамотнее
- */
- public static void sendMail(String emailAddress, String emailSubject){
- /*
- Имена параметров смотри
- выше в методе mailLogin - был email
- а тут - в похожем контексте - приняем уже emailAddress
- и нужна ли приставка email - в именах параметров метода sendMail?
- мы ж не говорим - кошка махала кошкиным хвостом
- кошка махала хвостом)
- это и в прошлой работе у тебя было
- обращай внимание на такие мелочи)
- */
- public static void refresh() {
- $(byXpath("//div[2]/div[1]/div/div[1]/div[1]/div/div/div[4]/div")).click();
- }
- /*
- дикий локатор)))
- старайся обходиться без xpath
- http://joxi.ru/82QYoQyI1PpoM2 - это подсказка
- приведу про xpath - ниже
- */
- public static void assertInInbox(String emailSubject){
- $(byText(emailSubject));
- }
- /*
- Мы в списке мейлов - проверки делаем не раз
- одна проверка - самое верхнее письмо в списке - содержит такой-то текст
- вторая проверка - в списке лишь одно письмо и его тексто содержит такой-то текст
- вывод - тебе нужно найти слектор для коллекции мейлов
- нужно - чтобы по этому селектору - а в inbox, и в sent, и в search режиме -
- мы всегда получали нужное количество верных элементов
- http://joxi.ru/v29WjP9hG7GRNr
- http://joxi.ru/Vrwqg81HKZKjw2
- */
- public static void assertInSent(String emailSubject) {
- $(byTitle("Sent Mail")).click();
- $(byName("me "));
- $(byText(emailSubject));
- /*
- читай - как называется метод)
- а что мы делаем
- мы делаем не проверку
- мы переходим в Sent
- это - действие
- и его прятать в методе-проверке - вредно
- не надо скрывать тестовую логику = прятать в методе-проверке действия
- или в методе-действии - проверку
- мы делали это единожды - когда в clearCompleted()
- после клика на кнопке проверили - что кнопка скрылась
- мы так позволили себе реализовать потому что
- с точки зрения тестовой логики - это была не важная проверка
- и сделав такую проверку по пути - мы малой кровью улучшили покрытие
- иногда в методах-действиях ждущие проверки выполняют роль умных ожиданий - что действие можно выполнить
- но тут - другая история
- нам нужно выполнить действие
- и нужно проверить его результат
- и оба этих момента - нужно отразить в тест-методе
- вторая и следующая операция - не являются проверками
- мы просто получили объекты типа SelenideElement - и ничего с ними не делали, никак не проверяли
- напоминаю - в проверках оперируй списком мейлов
- */
- }
- public static void searchAndAssert(String emailSubject) {
- $(byName("q")).setValue(emailSubject).pressEnter();
- $$(byText(emailSubject)).filter(visible).shouldHave(size(1));
- }
- /*
- то же касается и этого метода
- не объединяй действие и проверку в одном степе
- и оперируй списком мейлов
- проверить размер списка - недостаточно)
- нужно - чтобы в списке был один элемент, и его текст должен содержать такой-то текст
- вспомни - как ты в тестах todoMVC - проверял и тексты тасок, и их количество - с помощью одной проверки
- есть аналогичный кондишен, который точно также проверит порядок, количество и тексты элементов
- но тексты - не на равенство, а на вхождение
- */
- }
- /*
- Еще важный момент
- запусти тест дважды
- второй раз - тест не пройдет
- т к будет уже 2 мейла с такой темой
- выход - для каждого запуска теста - генерировать уникальный subject и им оперировать
- это можно сделать разными способами
- в том числе - добавить к тексту дату-время в миллисекундах
- */
- **************************************
- /*
- Про использование xPath
- css Selector-ов - почти всегда достаточно
- Тут - xPath-ы тебе точно не понадобятся
- Привожу тебе наш диалог с другим студентом)
- Почему грамотнее предпочитать cssSelectors xpath-выражениям
- student: а маска может быть написана через xpath?
- Julia Iluhina: может
- Julia Iluhina: но лучше используй цсс селектор - если есть такая возможность
- Julia Iluhina: http://stackoverflow.com/questions/16788310/what-is-the-difference-between-css-selector-xpath-which-is-betteraccording-t
- Julia Iluhina: http://elementalselenium.com/tips/32-xpath-vs-css
- Julia Iluhina: Некоторые вещи невозможно сделать без xpath
- Julia Iluhina: там конечно он пригодится)
- ...
- Iakiv Kramarenko: а если по делу - то икспасы ЗЛО, потому что громоздкие и плохо поддерживаемые
- и их стоит использовать очень редко, только когда цсс-ов не хватает
- единственное место где тебе нужны будут знания икспасов - это интервью
- потому что большинство автоматизаторов - плохие автоматизаторы) и почему то думают что икспасы это круто :)
- так вот… когда нужно будет пройти интервью - тогда и выучишь икспасы - а сейчас нечего дурным голову забивать
- Iakiv Kramarenko: On 7/26/16, at 3:27 PM, student wrote:
- > Может для икспаса другой синтаксис
- у икспаса конечно другой синтаксис
- и если ты хочешь найти элемент по икспасу нужно явно передавать в долар икспас
- так
- $(By.xpath(…))
- либо так
- $(byXpath(…))
- вот здесь я пишу об этом более подробно:
- http://automated-testing.info/t/pomogite-razobratsya-s-problemoj-czikla-v-selenide/10467/8
- */
Advertisement
Add Comment
Please, Sign In to add comment