Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class GoogleSearchTest {
- public static WebDriver driver;
- public static WebDriverWait wait;
- /*
- объявила статические переменные
- пока - фиксирую факты)
- */
- @Before
- public void init(){
- // System.setProperty("webdriver.chrome.driver", "/home/belka/Chromedriver/chromedriver");
- // driver = new ChromeDriver();
- driver = new FirefoxDriver();
- wait = new WebDriverWait(driver, 6);
- /*
- но - инициализировала их в @Before-методе
- это значит - что перед запуском каждого теста - будет создаваться свой вебдрайвер
- */
- driver.get("http://google.com/ncr");
- /*
- это по пути просто
- вынести в @Before-метод - в общем-то было можно
- но не обязательно
- потом решишь окончательно
- */
- }
- @AfterClass
- public static void close(){
- driver.quit();
- }
- /*
- а вот закрываешь вебдрайвер - уже после запуска всех тест-методов
- это значит
- 2 вебдрайвера открыли (перед запуском обоих тестов)
- 1 закрыли
- скорей всего - остался один открытый браузер у тебя
- */
- /*
- вот это + закрытие вебдрайвера - как раз то, что можно разместить в предке тест-класса
- т к - речь об общей логике тест-класса в целом -
- когда и какой вебдрайвер открыть,
- когда его закрыть (это тоже в этом классе должно быть)
- с каким таймаутом ждать - ну, тоже можно в предке тест-класса это разместить
- хотя... уже это спорно)
- на самом деле - задание таймаута - это уже детали реализации самого тест-класса
- и из этих соображений - можно было бы это делать уже в тест-классе
- когда открывать и закрывать вебдрайвер
- сейчас открытие вебдрайвера происходит в @Before-методе
- это значит - что это будет выполняться перед запуском каждого тест-метода
- соотвественно - и закрывать надо в таком случае - после запуска каждого тест-метода -
- в After-методе
- т е для варианта - свой вебдрайвер для каждого тест-метода
- открывать можно
- при инициализации не статической переменной
- 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)
- */
- ********************************************************
- ".srg .g"
- /*
- строка ".srg .g" - используется несколько раз
- используй для этой строки переменую String resultsCssSelector
- и примени ее в коде
- будет более DRY
- более того
- и для By.cssSelector(".srg .g") - можно переменную организовать
- By results = By.cssSelector(resultsCssSelector)
- и будет вообще ок
- на самом деле - для проверки
- wait.until(textToBePresentInElementLocated(By.cssSelector(".srg .g:nth-child(1)"), "Selenium automates browsers"));
- подойдет и такой локатор results)
- т к именно первый результат проверяем) чисто повезло)
- так что - можно вообще такой переменной ограничиться
- */
- ***********************************************
- private void followNthResultLink(int index) {
- ...; //add for next task "Google Task with separate testFollowLink"
- /*
- смело убирай комментарий
- эта строчка - в принципе полезная
- делает этот метод надежным и не зависимым от контекста вызова
- в том смысле - не важно - были в тесте ранее ожидания или нет - этот метод дождется ровно того,
- что ему нужно
- и выполнит действие
- */
- ************************************************
- public static ExpectedCondition<Boolean> minimumSizeOf(final By elementsLocator, final int expectedSize){
- ...
- public String toString(){
- return String.format("size of list " + elementsLocator + " to be: " + expectedSize + ". While actual size is " + listSize);
- }
- /*
- корректнее уточнить в фразе
- minimum size of ...
- size of list .... to be at least ...
- ну и напоминаю - есть такого плана стандартные кондишены
- на практике их можно заюзать
- мы тут тренировались)
- */
Advertisement
Add Comment
Please, Sign In to add comment