Java - Selenium - Несогласованное поведение при использовании Assert - PullRequest
2 голосов
/ 19 марта 2019

Я испытываю странное, непоследовательное поведение при попытке подтвердить, что отображается сообщение об ошибке.

У меня есть 2 теста, оба они делают одно и то же, за исключением отправки разных значений в форму и проверки другого сообщения об ошибке.

        System.setProperty("webdriver.chrome.driver", "C:\\Users\\dan.febry\\Desktop\\chromedriver_win32\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.manage().window().maximize();

        driver.get("https://mywebsite.com");

        driver.findElement(By.id("Identifier")).sendKeys("username");
        driver.findElement(By.id("Password")).sendKeys("password");
        driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div/div[2]/div[1]/div/form/button")).click();

        driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div/div[4]/div/button")).click();
        driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div/div[4]/div/div/form[1]/button")).click();

        driver.findElement(By.id("OldPassword")).sendKeys("Password!23");
        driver.findElement(By.id("NewPassword")).sendKeys("Password123!");
        driver.findElement(By.id("ConfirmPassword")).sendKeys("");
        driver.findElement(By.xpath("//*[@id=\"form0\"]/div[5]/div/button")).click();

        List<WebElement> allElements = driver.findElements(By.xpath("//*[@id=\"form0\"]/div[4]/ul/li"));
        Assert.assertEquals(allElements.size(), 1);
        Assert.assertEquals(allElements.get(0).getText(), "The new password and confirmation password do not match.");

        // TODO Verify failed counter has not gone up.

        driver.close();

    }

    @Test
    public void ChangePasswordCurrentPasswordIncorrect() {

        System.setProperty("webdriver.chrome.driver", "C:\\Users\\dan.febry\\Desktop\\chromedriver_win32\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.manage().window().maximize();

        driver.get("https://mywebsite.com");

        driver.findElement(By.id("Identifier")).sendKeys("username");
        driver.findElement(By.id("Password")).sendKeys("password");
        driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div/div[2]/div[1]/div/form/button")).click();

        driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div/div[4]/div/button")).click();
        driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div/div[4]/div/div/form[1]/button")).click();

        driver.findElement(By.id("OldPassword")).sendKeys("Password@123");
        driver.findElement(By.id("NewPassword")).sendKeys("Password123!");
        driver.findElement(By.id("ConfirmPassword")).sendKeys("Password123!");
        driver.findElement(By.xpath("//*[@id=\"form0\"]/div[5]/div/button")).click();

        List<WebElement> allElements = driver.findElements(By.xpath("//*[@id=\"form0\"]/div[4]/ul/li"));
        Assert.assertEquals(allElements.size(), 1);
        Assert.assertEquals(allElements.get(0).getText(), "Incorrect password.");

        // TODO Verify failed counter has gone up.
        // TODO Reset failed counter value

        driver.close();

    }`

Первый тест запускается, проходит и утверждает текст правильно. Однако второй тест не пройден и показывает следующую ошибку:

java.lang.AssertionError: ожидается [неверный пароль.], Но найден []

HTML-код:

<div class="validation-summary-errors text-danger" data-valmsg-summary="true">
  <ul>
    <li>Incorrect password.</li>
  </ul>
</div>

<div class="text-danger validation-summary-errors" data-valmsg-summary="true">
  <ul>
    <li>The new password and confirmation password do not match.</li>
  </ul>
</div>

PS. Не уверен, упустил ли я здесь какую-то важную информацию, поэтому дайте мне знать, должен ли я дать больше информации по этому вопросу.

1 Ответ

0 голосов
/ 19 марта 2019

Возможно не получить правильный Xpath, следовательно, он возвращает нулевой список.

Вместо этого xpath

driver.findElements(By.xpath("//*[@id=\"form0\"]/div[4]/ul/li"))

Попробуйте ниже Xpath и дайте некоторое время WebDriverWait, чтобы найтиэлементы

 WebDriverWait wait = new WebDriverWait(driver, 30);
 wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='validation-summary-errors text-danger']/ul/li")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...