Selenium Assert с существующим и несуществующим элементом - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть форма входа в систему, и мне нужно проверить ее с правильными и неправильными учетными данными.

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

Если учетные данные в порядке - mainPage.menu отображается WebElement.

Если учетные данные неверны - mainPage.menu WebElement не отображается.Страница входа может быть обновлена ​​или (не всегда) может отображаться сообщение об ошибке.

Как проверить это в тестах?

Для правильных учетных данных, тест работает:

Assert.assertEquals(true, mainPage.menu.isDisplayed());

В случае неверных учетных данных тест завершается неудачей, за исключением того, что mainPage.menu не может быть найден:

Assert.assertEquals(false, mainPage.menu.isDisplayed());

Если я вставлю в кнопку Подтвердить «Вход», тесты всегда будут успешными, потому что в любом случае(любые учетные данные) в течение первых 10 секунд отображается «Вход».Конечно, если я поставлю Thread.sleep, это решит проблему.Но это не очень хорошая практика.

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Хотя этот ответ будет отвечать вашим требованиям, но в идеале действительные и недействительные логины должны быть проверены в отдельных тестовых случаях .Кроме того, избегайте ссылок на такие элементы, как mainPage.menu , которые true в случае Ложные срабатывания .

Идеальными кандидатами для проверки могут быть:

  • Действительный логин: Приветственное сообщение
  • Неправильный логин: Сообщение об ошибке

В соответствии с вашим вариантом использования, вам нужночтобы вызвать блок try-catch{} следующим образом:

try{
    Assert.assertEquals(true, <placeholder_of_welcome_message>.isDisplayed());
}catch (NoSuchElementException e) {
    Assert.assertEquals(true, <placeholder_of_error_message>.isDisplayed()); 
}

Кроме того, вам может потребоваться вызвать WebDriverWait следующим образом:

try{
    Assert.assertEquals(true, new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.id("welcome_message_element_id"))));
}catch (NoSuchElementException e) {
    Assert.assertEquals(true, new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.id("error_message_element_id")))); 
}
0 голосов
/ 24 декабря 2018

проблема здесь

Assert.assertEquals(false, mainPage.menu.isDisplayed());

, если учетные данные неверны, тогда mainPage.menu не будет доступен правильно, что приводит к исключению.Так что надо с этим справиться. Использование try/catch

boolean displayed=false;

    try {
        mainPage.menu.isDisplayed();
        displayed=true;
    }catch (Exception e) {
        //element not displayed
        //displayed is false
    }

Assert.assertEquals(false, mainPage.menu.isDisplayed());
...