Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class GoogleSearchTest {
- @Test
- public void googleSearch(){
- /*
- в аналогичной работе с использованием Selenide - имя тест-метода було уже получше )
- searchAndFollowLink()
- подыми ревью по той работе и вспомни - почему такое имя лучше
- */
- WebDriver driver = new FirefoxDriver();
- /*
- открывать вебдрайвер и закрывать его - правильнее вне тест-метода
- это - не тестовая логика
- это - логика работы тест-класса в общем
- и еще такой момент
- если тест упадет - то строка driver.quit(); - просто не будет выполнена
- а значит - останется открытым бразузер после окончания работы теста
- что тоже - разбазаривание ресурсов
- а вот если закрывать браузер - вне тест-метода
- то тогда - вне зависимости от того - прошел тест или нет - все ок будет
- ниже распишу это попопдробнее - где можно реализовывать работу с вебдрайвером
- */
- driver.get("http://google.com");
- driver.findElement(By.name("q")).clear();
- driver.findElement(By.name("q")).sendKeys("Selenium automates browsers");
- driver.findElement(By.name("q")).sendKeys(Keys.ENTER);
- /*
- sendKeys - поддерживает несколько параметров (посмотри на сигнатуру метода - зажав ctrl + наведя на имя метода курсор мыши)
- не обязательно для ENTER - использовать отдельную строку кода
- */
- List<WebElement> searchTasks = driver.findElements(By.cssSelector(".srg>.g"));
- /*
- имя переменной - опять какое-то странное
- почему не учел уже отревьювленное в прошлом задании?
- нам не нужна переменная типа List<WebElement>
- причина - таким образом полученній список вебєлементов = не переискивается
- он останется таким, каким мы его тут получили (хоть ситуация на странице уже изменилась)
- такая - фотография на момент получения
- потому - так полученный список результатов - нам неприголится
- в отличие от локатора By.cssSelector(".srg>.g")
- его мы использовать будем несколько раз
- а раз так - для него нужна переменная
- и этот локатор - можно каждый раз
- когда нам нужно обратиться к списку результатов поиска
- можно использовать
- для получения списка
- как параметр для кондишена
- */
- assertTrue(searchTasks.size() <11);
- /*
- селектор - ок
- а вот проверка - не ок
- во-первых размер меньше 11
- это и нулевой размер тоже)
- а нам нужно проверить - что результатов = 10
- изредка - по такому селектору гугл действительно выдает не 10 результатов
- если это так - приходи в слек, помогу разобраться
- но как правило - 10
- и самое главное - проверка должа быть ждущей
- в видео было объяснено - как для ждущих проверок - использовать new WebDriverWait(...).until(....)
- в качестве параметра для таких методов - можно использовать кондишены
- В Selenium - это ExpectedCondition
- пересмотри еще раз видео и примени такие проверки - new WebDriverWait(...).until(....)
- все проверки - должны быть ждущими
- не факт - что в момент начала выполнения проверки - тестовая ситуация уже такая, как нам нужно
- потому - применяй ждущие проверки
- мы, кстати, это обсуждали в слеке вчера
- советую еще раз просмотреть видео и попробовать применить new WebDriverWait(...).until(....)
- будут вопросы и/или сложности - давай обсуждать
- но для начала - попробуй применить
- и в видео, и в конспекте - материалы есть
- */
- assertTrue(searchTasks.get(0).getText().contains("Selenium automates browsers"));
- /*
- то же самое и насчет этой проверки - нужна ждущая проверка
- */
- driver.findElements(By.cssSelector(".srg>.g")).get(0).click();
- /*
- заметь, ты тут заново по локатору получил список веб-элементов
- верный ход)
- только хорошо бы локатор вынести в переменную
- если бы все проверки выше - были верно реализованы
- то и это действие без проблем бы выполнилось
- т к на этот момент - мы бы уже гарантированно работали с загруженным списком результатов
- после этого действия - не хватает проверок
- у селениума - есть кондишен для проверки урлов
- используй ждущую проверку и для этого
- https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html
- */
- driver.quit();
- }
- ************************************************************************************
- /*
- открытие и закрытие вебдрайвера
- речь об общей логике тест-класса в целом -
- когда и какой вебдрайвер открыть,
- когда его закрыть
- с каким таймаутом ждать выполнения кондишенов
- сейчас driver.quit(); - выполняется в конце самого тест-метода
- самый большой минус этого - если тест упадет раньше на какой-то из предыдущих строк кода тест-метода
- то - вебдрайвер не закроется
- что - очень плохо
- правильнее - реализовывать так, чтобы вебдрайвер - закрылся обязательно - независимо от того,
- с каким результатом отработает тест
- для варианта - свой вебдрайвер для каждого тест-метода
- открывать можно
- при инициализации не статической переменной
- instance initialization block
- Before метод
- закрывать
- After метод
- а для варианта - один вебдрайвер на все тест-методы одного класса
- (такой вариант подходит, если все тесты запускать в одном потоке - как мы до этого и делали)
- открывать можно
- при инициализации статической переменной
- static initialization block
- BeforeClass метод
- закрывать
- AfterClass метод
- какой вариант выбрать - зависит от обстоятельств
- просто - важно понимать разницу и выбирать наиболее подходящий в данном случае
- Полезные линки
- http://www.javamadesoeasy.com/2015/06/differences-between-instance.html
- http://stackoverflow.com/questions/15493189/beforeclass-vs-static
- Получим более содержательное сообщение об ошибке - если работаем с аннотированными методами
- http://www.unknownerror.org/opensource/junit-team/junit/q/stackoverflow/512184/best-practice-initialize-junit-class-fields-in-setup-or-at-declaration
- http://www.javaworld.com/article/2076265/testing-debugging/junit-best-practices.html
- (подзаголовок Do not use the test-case constructor to set up a test case)
- */
Advertisement
Add Comment
Please, Sign In to add comment