Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- если я верно понял задание ))
- /*
- ну, направление верное)
- но есть нюансы)
- ревью прошлого решения и тут примени
- про такое же - не пишу
- */
- **************************************************************
- public class SearchGoogleSeleniumSeparate {
- /*
- имя тест-класса - заканчивается на Test
- согласно conventions
- обязательно на раздел по неймингу посмотри
- имя класса - как в прошлой работе - и тут будет ок
- */
- WebDriver driver = new FirefoxDriver();
- WebDriverWait wait = new WebDriverWait(driver, 6);
- /*
- ага, тут по-другому реализовал
- правильно - что удаляешь вебдрайвер в After-методе
- такие переменные (не статические) - будут инициализироваться перед запуском каждого теста
- соотвественно - и убивать надо после каждого
- вообще - есть нюансы - где что реализовавыть)
- тут все ок у тебя получилось, но важно знать
- BeforeClass vs static initialization block
- 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)
- Примерно также обстоят дела с вариантами instance initialization block vs before
- туда же в кучу и инициализация не статической переменной
- Так что если код теоритечески может упасть - лучше юзай jUnit-овские
- Before & After / BeforeClass & AfterClass
- */
- ****************************************
- @Before
- public void createDriverOpenGoogleAndSearch() {
- driver.get("http://google.com/ncr");
- findElement(By.name(searchField)).sendKeys(searchQuery + Keys.ENTER);
- }
- /*
- красивые грабли)
- даже несколько)))
- читаем имя метода
- читаем реализацию
- правда - про разное написано?
- это раз)
- не торопись равнять имя
- для обоих тестов - согласна - надо открывать урл
- а дальше - начинается разница
- testSearchResultsSizeAndText - тестирует действие Search
- но - мы его делаем не в тест-классе
- как считаешь - что будет - если при выполнении Search - случится исключение?
- узнаем мы, что тест testSearchResultsSizeAndText - не прошел?
- вот тебе и вторые грабли
- да, в Before-метод - можно вынести открытие урла
- это подготовительные действия для обоих тест-методов
- но Search - другая история
- в одном тест-методе - это тестируемые действия
- а в другом - предварительные действия, подготовка тестовой ситуации
- это не получится вынести в Before
- */
- *************************************************
- @Test
- public void testFollowResultLink() {
- wait.until(visibilityOfAllElementsLocatedBy(By.cssSelector(searchResults)));
- /*
- посмотри на реализацию этого кондишена ради интереса
- удивишься)
- ты верно понял - что перед кликом на линке такого-то результата - надо подождать
- вопрос - чего
- минимально, чего нужно дождаться если ты кликаешь на элементе с индексом 3
- чтобы размер списка был 3+1
- реализуй кондишен minimumSizeOf
- и тут его примени
- */
- findElements(By.cssSelector(searchResults)).get(0).findElement(By.cssSelector(resultLink)).click();
- /*
- писала тебе в ревью к прошлой работе - реализуй метод followLink(int index)
- и внутрь метода встрой эту проверку
- такая проверка служит именно тому, чтобы дождаться - что на момент клика - есть
- на чем кликать
- и такого надо ждать всегда при использовании followLink
- соответственно - проверку можно включить в метод followLink
- на правах необходимого для корректной работы ожидания
- */
Advertisement
Add Comment
Please, Sign In to add comment