JAVA - Selenium WebDriver - Утверждения и ожидания - PullRequest
1 голос
/ 17 апреля 2019

У меня проблема с моим утверждением, или, скорее, с «временем» выполнения утверждения. Таким образом, утверждение работает так, как должно, однако оно выполняется слишком быстро, поскольку выполняется без ожидания загрузки страницы, на которую оно должно ориентироваться. Это означает, что утверждение не проходит проверку.

Имея это в виду, я пытался найти, как добавить «ожидание» к утверждению, чтобы заставить его ждать загрузки страницы перед запуском, но безуспешно.

Итак, кто-нибудь, пожалуйста, сможет помочь с этим, как в том, как я мог бы кодировать так, чтобы assert «ждал» загрузки страницы и затем выполнялся?

Я попытался добавить ожидание в метод заголовка, я попытался добавить ожидание в тестовый скрипт, но безуспешно.

public class test1 extends DriverSetup{

    //Here we are setting the method to use the homePage
    private HomePage homePage = new HomePage(getDriver());

    //Here we are setting the method logInPage
    private AuthenticationPage authenticationPage = new AuthenticationPage(getDriver());

    //Here are setting the method CreateAccountPage
    private CreateAccountPage createAccountPage = new CreateAccountPage(getDriver());

    //Here we are setting the method to access the Website HomePage with the driver
    private void accessWebsiteHomePage (){

        getDriver().get("http://automationpractice.com/index.php");
    }

@Test
    public void CreateAccount() {

        accessWebsiteHomePage();

        //Log in
        homePage.logInBut();

        //Authentication page "Create a new account" box
        authenticationPage.setCreateAccountEmailAddress(emailGenerator.Email());
        authenticationPage.CreateAccountButtonClick();

        Assert.assertEquals("CREATE AN ACCOUNT", createAccountPage.HeaderCheckRightPage());

Утверждение должно быть нацелено на страницу «CREATE AN ACCOUNT», но оно нацелено на страницу «AUTHENTICATION», которая предшествует ему, следовательно, тест не пройден, так как распечатывается «фактическое» значение на странице «AUTHENTICATION», не на странице "СОЗДАТЬ СЧЕТ".

1 Ответ

1 голос
/ 29 апреля 2019

Вам нужно использовать явное ожидание.Вот тот, который будет ждать, пока заголовок не будет равен чему-либо:

private ExpectedCondition<Boolean> titleIsEqualTo(final String searchString) {
    return driver -> driver.getTitle().equals(searchString);
}

Вы можете сделать его более надежным, приведя случай того, что вы хотите сопоставить, следующим образом:

private ExpectedCondition<Boolean> titleIsEqualTo(final String searchString) {
    return driver -> driver.getTitle().toLowerCase().equals(searchString.toLowerCase());
}

Затем перед утверждением нужно вставить следующее:

WebDriverWait wait = new WebDriverWait(driver, 10, 100);
wait.until(titleIsEqualTo("CREATE AN ACCOUNT"));

Я предполагаю, что под заголовком вы подразумеваете заголовок страницы, поскольку вы не показали код, который собирает заголовок.,

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

Не лямбда-версия вышеуказанного ожидаемого условия:

private ExpectedCondition<Boolean> titleIsEqualTo(final String searchString) {
    return new ExpectedCondition<Boolean>() {
        @Override
        public Boolean apply(WebDriver driver) {
            return driver.getTitle().toLowerCase().equals(searchString.toLowerCase());
        }
    };
}
...