Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Configuration {
- public static long timeout = 10;
- }
- /*
- в самом классе Configuration
- пропиши более универсальное значение (4 с будет ОК для многих приложений)
- а уже в тест-классе - переустанови таймаут на нужное тебе значение
- ты в решении этой же задачи на Selenide - ты подобное делала уже
- http://joxi.ru/brRlV57uQgdxo2
- учти только, что теперь таймаут измеряется в секундах
- */
- ********************************
- public static <V> ExpectedCondition<V> elementExceptionsCatcher(final Function<? super WebDriver, V> condition) {
- ...
- } catch (StaleElementReferenceException | IndexOutOfBoundsException ex) {
- return null;
- } catch (ElementNotVisibleException ex) {
- return null;
- }
- /*
- это можно свернуть в одну catch-секцию
- ты уже применяешь это - StaleElementReferenceException | IndexOutOfBoundsException
- для третьего типа исключения тоже так делай
- */
- ***********************************************************
- public static ExpectedCondition<Boolean> listNthElementHasText(final List<WebElement> elements, final int index, final String expectedText){
- return new ExpectedCondition<Boolean>() {
- ...
- public Boolean apply(WebDriver driver) {
- try {
- ...
- return Boolean.valueOf(elementText.contains(expectedText));
- /*
- можно обойтись без явного приведения типов
- return elementText.contains(expectedText);
- вот так тоже будет ок
- http://stackoverflow.com/questions/3728616/boolean-vs-boolean-in-java
- см вот этот кусочек http://joxi.ru/Q2KpJYOs95GDlA
- */
- } catch (StaleElementReferenceException | IndexOutOfBoundsException ex) {
- return false;
- }
- /*
- а тут - почему elementExceptionsCatcher не применяешь?
- стоит это применить во всех кондишенах
- и убрать из них try-catch секции
- */
- ************************************************************
- public static ExpectedCondition<List<WebElement>> textsOf(final List<WebElement> elementList, final String... expectedTexts){
- ...
- actualTexts.clear();
- for (WebElement element : elementList) {
- actualTexts.add(element.getText());
- }
- ...
- if (elementList.size() != expectedTexts.length){
- return null;
- }
- for (int i = 0; i < expectedTexts.length; i++) {
- if (!elementList.get(i).getText().contains(expectedTexts[i])){
- /*
- выше - мы специально собрали тексты элементов в список actualTexts
- правильнее далее по коду оперировать им -
- его элементы сравнивать с ожидаемыми текстами
- его размер сравнивать с количеством ожидаемых текстов
- важно - чтобы на протяжении всего кода apply
- мы с одним и тем же работали
- мы работаем с лейзи прокси списком elementList
- он может снова измениться к моменту, когда
- ты начнешь получать его размер или текст элемента
- вот получим мы уже измененное значение elementList.get(i).getText()
- сделаем на этом основании выводы
- а потом в toString расскажем про ранее сохраненные тексты
- а не про то, на основании чего делали выводы
- и можно долго думать - в чем же дело)
- т е - после того - как получили actualTexts
- мы ничего уже не будем получать у elementList
- ни размера, ни текстов элементов
- все это уже есть и у actualTexts
- мы лишь вернем elementList
- в случае успешно пройденной проверки
- */
- ...
- @Override
- public String toString() {
- return String.format("text in element list should be:\n" + Arrays.toString(expectedTexts.clone()) + "\nWhile actual is:\n" + Arrays.toString(actualTexts.toArray()).replace("\n", " "));
- }
- /*
- а для чего Arrays.toString(expectedTexts.clone())?
- можно ведь проще - Arrays.toString(expectedTexts)
- Arrays.toString(actualTexts.toArray()).replace("\n", " ")
- не стоит искажать факт
- ну да, содержат тексты элементов переходы на другую строку
- это может быть важно для анализа ошибки
- выведи ровно то - что есть по факту
- это будет максимально корректно
- */
- **************************************************
- public List<WebElement> $$(By locator){
- return assertThat(visibilityOfAllElementsLocatedBy(locator));
- }
- /*
- писала про это в http://pastebin.com/2sT6aj3w
- строки 31-34
- ты было эти 2 метода закомментила
- теперь - раскомментила)
- посмотри - как устроен visibilityOfAllElementsLocatedBy
- в большинстве случаев он мало чему поможет
- да и вообще - для списка еще неизвестно - чего правильно будет подождать
- пока нам этот метод не нужен
- можно просто удалить методы $$
- */
- ***********************************
- public void assertNthMail(int index, String mailText){
- assertThat(listNthElementHasText(mails, index, mailText), Configuration.timeout);
- }
- /*
- тут достаточно вызвать assertThat(listNthElementHasText(mails, index, mailText));
- вспомни - как работает assertThat с одним параметром
- */
Advertisement
Add Comment
Please, Sign In to add comment