Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class GoogleSearch {
- ....
- public class GoogleSearchTest extends GoogleSearch{
- ....
- /*
- Вот этот GoogleSearch - получился - то ли свинка, то ли морская )
- судя по тому, что в нем реализованы вспомогательные методы - похож на пейдж
- но - при этом - предок для тест-класса
- и еще при этом - имя у класса - GoogleSearch - как у пейджа-модуля,
- а не как у пейджа-объекта(заканчивается на Page) или предка тест-класса (заканчивается на Test)
- Очень важный момент
- Предок тест-класса - может реализовывать только какой-то переиспользуемый кусок логики тест-класса
- = что надо сделать до/после запуска всех тестов/каждого теста
- вот это - как раз для предка тест-класса
- но - он не может быть контейнером для вспомогательных методов тест-класса (это ответственность пейджа)
- погугли single responsibility principle
- в этом задании - можно было вообще не заводиться с пейджами
- т к согласно задания
- You will do only a smoke coverage and you most probably will not reuse "steps" in other tests.
- (Or you don't know will you reuse or not)
- если удобно вынести - возражать не буду
- но и потребности такой нет
- структуру в любом случае - надо поправить
- */
- ****************************************
- public void openPage(){
- open("http://google.com/ncr");
- }
- /*
- лично я избегаю употребления слова Page в каком-тибо другом контексте, кроме
- контекста пейджа (имя класса для пейджа должно заканчиваться на Page
- соображения - чтоб избежать двусмысленностей
- настаивать на том, что мое мнение - единственно правильное - не буду)
- я бы назвала такой метод openApp, visit
- */
- ************************************************
- public void searchQuery(String queryText){
- /*
- с названием параметра queryText - достаточно имени метода search
- селектор элемента - можно подобрать нагляднее
- обрати внимание на name поля - в разных продуктах google у строки поиска именно такой name
- By.name - можно применить такой метод
- */
- **************************************
- public void assertCountResult(int count){
- /*
- assertCountOfResults, assertResultsCount, assertResultsNumber - более точные имена
- https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#heading=h.o7vsh4r93b55
- селектор - рабочий
- но можно его уточнить - вместо пробела используя знак >
- еще такой момент
- это - не единственное место, где мы будем оперировать списком результатов или его внутренними частями
- правильнее было бы вынести эту коллекцию в переменную
- */
- **************************************
- public void assertTextsFirstElement(int numberOfElement, String queryText){
- /*
- уже применил термин Results - вполне уместно и удачно
- и тут применим - мы проверяем результат
- тогда имя - достаточно точное и понятное - assertResult
- первый параметр - лучше int index (ниже поясню
- а второй - String text (resultText / containedText) - это уже не текст запроса, это текст результата
- про первый параметр
- когда нам нужно указать такой-то элемент коллекции - лучше нумеровать с нуля
- лучше - быть понятнее для большинства
- большинство в большинстве случаев столкнулось с нумерацией с нуля)
- большинство увидело тот же термин - index
- а для индекса элемента в коллекции/массиве - применяется именно термин index
- мы используя такой термин - лишний раз подчеркнули - нумеруем с нуля
- надеюсь, я тебя убедила
- https://en.wikipedia.org/wiki/Zero-based_numbering
- http://c2.com/cgi/wiki?ZeroAndOneBasedIndexes
- http://stackoverflow.com/questions/24841172/why-is-array-indexing-in-java-start-with-0
- т е - не только имя параметра поправь, но и его использование - нумеруем с нуля
- */
- ***********************************************
- $$(".st").get(numberOfElement).shouldHave(Condition.text(queryText));
- /*
- тут - надо из коллекции результатов (я выше писала - что она нам еще пригодится
- получить результат по индексу
- и у него проверить текст - по вхождению
- уточняться до ".st" - не нужно
- нам это ничего не дает
- проверяем - что такой-то текст входит в текст такого-то результата
- Condition.text - используй static import
- */
- *****************************************
- public void followTo(String queryText){
- $(By.linkText(queryText)).click();
- /*
- какой хитрый)
- не
- нам надо
- 5 follow the link in 1st result
- в списке результатов
- получить такой-то результат
- у него - главную линку
- и на ней - кликнуть
- т е - нам нужен метод followLink(int index)
- */
- ***************************************************************
- public void assertPresentElement(String queryText){
- $(".downloadBox").shouldHave(Condition.exactText(queryText));
- }
- /*
- когда нам нужен метод
- когда что-то будет переиспользоваться
- чтобы упростить наш окончательный код - скрыть сложности
- чтобы вместо неочевидного кода - получить вызов метода с наглядым названием
- как считаешь - стоило оно того, чтобы реализовывать вместо
- $(".downloadBox").shouldHave(exactText(queryText));
- вариант
- assertPresentElement(String queryText)
- ?
- а мы еще и скрыли логику самой проверки
- так что - использование такого метода
- не даст никаких преимуществ перед
- вариантом, когда прямо в коде тест-метода
- мы напишем $(".downloadBox").shouldHave(exactText(...))
- тут еще есть интересный момент)
- если бы ты вспомогательные методы вынес в пейджа
- вот такой метод - туда выносить не стоило)
- т к к собственно логике google search - это не относится
- еще - обращай внимание на имена параметров методов
- термин queryText - ты использовал в очень разных смыслах
- это плохо влияет на наглядность кода
- */
- ***********************
- @Test
- public void basicLifeCycle(){
- /*
- можно и так назвать)
- а можно и searchAndFollowLink
- пока еще достаточно читаемо
- */
- ...
- assertTextsFirstElement(1, "Selenium automates browsers");
- /*
- вот тут - для этого вызова - будешь использовать параметры
- (0, "Selenium automates browsers")
- это я поясняю мысль про нумерацию с нуля
- */
- followTo("Selenium - Web Browser Automation");
- assertPresentElement("Download Selenium");
- /*
- можно после проверки текста некого элемента со страницы селениума -
- усугубить проверку
- сверив урл текущей станицы с требуемым урлом
- так будет точнее всего для выполнения
- 6 check that selenium official page is loaded
- а проверка текста некого элемента со страницы селениума -
- как раз выполнит функцию умного ожидания загрузки страницы
- т к для сверки урла - придется применить простой jUnit-овский
- assertEquals
- */
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment