Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class GoogleSearhTest {
- @Test
- public void testGoogleSearh(){
- /*
- имя тест-метода - ничего не добавило к имени тест-класса
- testSearchAndFollowLink - было бы лучше
- мы бы отразили - что мы проверяем
- и не повторяли бы одно и то же
- */
- open("http://google.com/ncr");
- /*
- используй пропуски строк для того чтоб код воспринимался полегче
- */
- googleSearchField.sendKeys("Selenium automates browsers");
- googleSearchField.pressEnter();
- /*
- можно было бы написать код в одну строчку
- $(...).setValue(...).pressEnter();
- насчет того - нужна ли переменная
- я бы не делала)
- если бы делала - то делалал метод search(...)
- согласно задания - этого всего не требуется)
- */
- assertTrue(getResultNumber()>10);
- /*
- это сложно, не надежно и не точно
- просто, надежно и точно - проверить размер коллекции элементов
- =результаты поиска
- $$(...).shouldHave(size(...))
- shouldHave - ждущая проверка
- это надежно
- в отличие от assertTrue - не ждущей проверки
- если в этот момент что-то не догрузилось на странице - то проверка упадет
- т е - она упадет - не из-за ошибок, а из-за того, что мы чего-то не дождались
- такой вариант проверки - наглядный и с простой логикой на уровне тест-метода = простой
- насчет точности. То, что где-то написано - что результатов столько-то
- еще не значит, что их столько)
- так что - точнее - проверить именно количество результатов
- результаты - http://joxi.ru/MAj1YoWsvn88v2
- это вот такая коллекция
- попробуй подобрать селектор
- бывает, что результатов больше 10
- как правило - в таких случаях есть еще какие-то рекламные результаты или советы
- остальных результатов = 10
- если их таки не 10 - покажи скриншот
- возможно, что-то посоветую
- ну или у меня будет картинка, иллюстрирующая исключение )
- */
- firstResult.shouldHave(text("Selenium automates browsers"));
- /*
- в целом - верно)
- но - незачем использовать переменную
- в каких случаях нужна переменная
- https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#bookmark=id.4i6i27d7lwn4
- про то, как получить первый результат - ниже напишу
- */
- firstLink.click();
- /*
- тоже - тут нет причин использовать переменную
- и как получать главную линку первого результата - ниже напишу
- */
- System.out.println(title());
- /*
- это отладочное сообщение - убирай по финишу
- */
- assertTrue(title().contains("Selenium - Web Browser Automation"));
- /*
- assertTrue - не ждущая проверка
- нам надо дождаться - что страница загружена
- и уже потом уточнять - что именно такая как надо страница загружена
- чтоб дождаться загрузки страницы - проверь какой-нибудь элемент на странице
- что-нибудь похарактернее)
- $(...).shouldHave(text("What is Selenium?"));
- а потом бы - советую сверить урл
- а не тайтл
- это будет максимально точно
- assertEquals - даст более наглядное сообщение в случае ошибки
- http://junit.sourceforge.net/javadoc/org/junit/Assert.html#assertEquals(java.lang.Object, java.lang.Object)
- */
- }
- SelenideElement googleSearchField = $("#lst-ib");
- /*
- насчет селектора
- можно нагляднее
- обрати внимание на name этого же элемента
- у очень многих продуктов google строка поиска именно такое имя имеет
- от слова query
- http://joxi.ru/823k1x0U6oavV2
- */
- static SelenideElement resultStats = $("#resultStats");
- /*
- это - просто не нужно
- */
- static SelenideElement firstResult = $(".st");
- /*
- писала тебе выше - что нам нужна коллекция элементов
- результаты поиска
- и тогда первый результат = results.get(0)
- если нам нужно что-то из списка результатов
- то будем отталкиваться от results
- так будет и точнее, и нагляднее
- да и селекторов будет гораздо меньше
- кстати, уточняться до .st - и не нужно
- ведь текст результата проверяем с помощью кондишена text
- т е - что в текст элемента входит такой-то текст
- */
- static SelenideElement firstLink = $(".r>a");
- /*
- то же самое
- отталкиваемся от results
- получаем первый результат results.get(0)
- и уже внутри него - получаем главную линку results.get(0).$(".r>a")
- */
- public static int getResultNumber(){
- String resultStatsValue = resultStats.getText().split(" ")[1];
- int resultNumber = Integer.parseInt(resultStatsValue.replace(",",""));
- System.out.println(resultNumber);
- return resultNumber;
- }
- /*
- когда у элемента получаем resultStats.getText() - тоже тут нету ожидания нужного нам текста
- вспомни - когда нам было нужно реализовать assertItemsLeft
- как мы проверяли текст такого-то элемегта
- это просто по пути
- нам не надо получать этот текст)
- работаем с коллекцией = результаты поиска
- */
- }
- /*
- что касается вынесения селекторов в переменые
- тут - тебе лишь переменная results и нужна
- остальное - либо производные от results вещи
- либо используются лишь раз
- если такой код кажется не наглядным или не удобным
- то реализуй вспомогательные методы (прямо в тест-классе - т к потребности в пейдже пока нету - согласно задания)
- и уже внутри методов - спрячешь селекторы
- и код станет нагляднее
- это не обязательно
- но этот вариант - лучше по сравнению с вариантом - когда просто все локаторы вынесены в переменые
- */
Advertisement
Add Comment
Please, Sign In to add comment