Можете ли вы создать универсальный или повторно используемый метод для явного ожидания в Java и Selenium? - PullRequest
0 голосов
/ 05 июля 2018

Можем ли мы создать универсальный или повторно используемый метод для явного ожидания в Java и Selenium?

использовать ожидаемые условия, такие как, visibilityOfElementLocated ,senceOfElementLocated, elementToBeClickable

Любая помощь приветствуется.

спасибо

1 Ответ

0 голосов
/ 05 июля 2018

Вы можете полностью. Я беру это из другого ответа, который я написал здесь: Selenium Java SafariDriver ждет загрузки страницы после нажатия

public ExpectedCondition<Boolean> myCustomCondition(/* some arguments from the outside */) {
return new ExpectedCondition<Boolean>() {
        public Boolean apply(WebDriver driver) {
            // Check something on the page and return either true or false,
            // this method will be run repeatedly until either the time
            // limit is exceeded, or true is returned
        }

        public String toString() {
            return "a description of what this is waiting for";
        }
    };
}

В моем опыте это наиболее распространенный способ. Но здесь нужно знать, что вы хотите получить экземпляр ExpectedCondition, который обеспечивает реализацию для методов apply () и toString ().

apply() должен возвращать true только при выполнении условия.

Вот простой реальный пример:

public ExpectedCondition<Boolean> waitForElementToHaveText(final WebElement element, final String expectedText) {
    return new ExpectedCondition<Boolean>() {
        public Boolean apply(WebDriver driver) {
            try {
                return element.getText().equals(expectedText);
            } catch (Exception e) {
                return false; // catchall fail case
            }
        }

        public String toString() {
            return "an element to have specific text";
        }
    };
}

Это можно использовать как:

WebDriverWait wait = new WebDriverWait(driver, maxSecondsToWait);
wait.until(waitForElementToHaveText(anElement, "my visible text"));

Редактировать:

Некоторые дополнительные примечания, если вы заметили, что объявленный универсальный тип, который используется ExpectedCondition, является логическим, это означает, что вы хотите вернуть true или false, чтобы определить, выполняется ли условие. Но null также работает как альтернатива false. Другой способ сделать это - объявить ваш ExpectedCondition универсальным типом WebElement и вернуть ноль, если условие не выполнено.

public static ExpectedCondition<WebElement> waitForElementToContainText(final String cssSelector, final String visibleText) {
    return new ExpectedCondition<WebElement>() {
        @Override
        public WebElement apply(WebDriver webDriver) {
            WebElement anElement = webDriver.findElement(By.cssSelector(cssSelector);
            if (anElement.getText().contains(visibleText)) {
                return anElement; // Condition passed
            }
            return null; // Condition failed
        }

        public String toString() {
            return "first occurance of text '" + visibleText + "' in element " + cssSelector;
        }
    };
}

Конечно, любой из этих примеров может использовать <Boolean> или <WebElement> и просто захочет выбрать для него подходящее возвращаемое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...