Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.12</version>
- </dependency>
- <dependency>
- <groupId>org.seleniumhq.selenium</groupId>
- <artifactId>selenium-java</artifactId>
- <version>2.53.1</version>
- </dependency>
- </dependencies>
- /*
- <dependencies> - можно уже 2.53.1 селениум использовать
- <build> - вполне ок будет и без этой секции
- попробуй убрать, я не понимаю - зачем тебе эта секция
- расскажи - зачем )
- или - убери лишнее
- */
- ************************
- public class BaseTest {
- protected static WebDriver driver;
- protected static WebDriverWait wait;
- @BeforeClass
- public static void setup() {
- driver = new ChromeDriver();
- wait = new WebDriverWait(driver, 6);
- }
- @After
- public void tearDown() {
- driver.quit();
- }
- }
- /*
- пока у нас один тест-метод - мы этой проблемы не увидим
- но она есть)
- на 2-ух и более тест-методах в одном тест-классе - проявится
- */
- /*
- вот это + закрытие вебдрайвера - действительно, как раз то, что стоит разместить в предке тест-класса
- т к - речь об общей логике тест-класса в целом -
- когда и какой вебдрайвер открыть,
- когда его закрыть (это тоже в этом классе должно быть)
- с каким таймаутом ждать - ну, тоже можно в предке тест-класса это разместить
- хотя... уже это спорно)
- на самом деле - задание таймаута - это уже детали реализации самого тест-класса
- и из этих соображений - можно было бы это делать уже в тест-классе
- когда открывать и закрывать вебдрайвер
- сейчас открытие вебдрайвера происходит в @BeforeClass-методе
- это значит - что это будет выполняться единожды перед запуском всех тест-методов
- соотвественно - и закрывать надо в таком случае - после того, как все тест-методы отработают -
- в AfterClass-методе (а не как сейчас - в 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)
- */
- ***********************************
- public static ExpectedCondition<Boolean> sizeOf(final By elementsLocator, final int expectedSize) {
- /*
- ок реализовала
- учти еще из предыдущего ревью строки 81-83
- */
- ***************************************
- public static String searchResults = ".srg .rc";
- /*
- не послушала ты меня)
- тут больше подойдет ".srg .g"
- иначе - будут проблемы с использованием nth-child
- посмотри еще раз строки 145-166 прошлого ревью
- */
- ***************************************
- assertNthResult(0, "Selenium automates browsers");
- public void assertNthResult(int index, String searchText) {
- wait.until(
- textToBePresentInElementLocated(By.cssSelector("(" + searchResults + "):nth-child(" + index + ")"), searchText));
- }
- /*
- вызов assertNthResult(0, "Selenium automates browsers"); - ок
- только - когда мы формируем селектор - нужен не нолик, а единичка
- ну и ".srg .g", а не ".srg .rc"
- посмотри на картинки и линки в прошлом ревью про это
- формируя селектор, используй
- не By.cssSelector("(" + searchResults + "):nth-child(" + index + ")"
- а By.cssSelector("(" + searchResults + "):nth-child(" + (index+1) + ")"
- */
Advertisement
Add Comment
Please, Sign In to add comment