Slenium-Java: Wait.until(ExpectedConditions.invisibilityOfElementLocated()) всегда завершается неудачно для негативных сценариев

ExpectedConditions.invisibilityOfElementLocated throws Timeout Exception и завершает программу.

шаг

  1. Запустите браузер и перейдите на страницу входа.

  2. Введите имя пользователя, пароль и нажмите Войти

  3. Поскольку загрузка занимает разное время, я хочу подождать, пока кнопка входа не станет невидимой

Это хорошо работает для положительных случаев, когда я использую действительные учетные данные и нажимаю на кнопку входа. но это всегда дает сбой в отрицательном случае, т.е. когда я пытаюсь с недопустимыми комбинациями имени пользователя и пароля clcik при входе в систему, он ожидает максимальное время, а затем завершается неудачей с исключением по тайм-ауту. Наконец я попытался использовать Try / Catch и подтвердил заголовок, но на самом деле не понимаю, почему не работает негативный сценарий, хотя условием ожидания является страница входа, и я использую элемент невидимый...

driver = new FirefoxDriver();
    driver.manage().window().maximize();
    //driver.manage().timeouts().implicitlyWait(12, TimeUnit.SECONDS);
    driver.get("http://newtours.demoaut.com/");
    driver.findElement(By.name("userName")).sendKeys("valid password");
    driver.findElement(By.name("password")).sendKeys("invalid password");
    driver.findElement(By.name("login")).click();
    WebDriverWait wait = new WebDriverWait(driver, 60);
    wait.until(ExpectedConditions.invisibilityOfElementLocated(By.name("login")));
    titleActual = driver.getTitle();
    if (titleActual.equals(titleExpected)) {
        System.out.println("Login successful");
    } 
    else {
}
driver.close;

Ожидаемое: после ввода имени пользователя и пароля, как только я нажимаю на Signin - он должен выйти из режима ожидания и получить заголовок страницы драйвера. Actual: Ожидание в течение максимального времени, указанного с ошибкой Timeout exception, прекращает выполнение программы

Журналы:

21 августа 2019 г. 17:38:37 org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Обнаружен диалект: W3C Исключение в потоке "main" org.openqa.selenium.TimeoutException: ожидаемое условие не выполнено: ожидание элемента больше не требуется. быть видимым: By.name: логин (пытался в течение 60 секунд с интервалом 500 миллисекунд) Информация о сборке: версия: '3.141.59', ревизия: 'e82be7d358', время: '2018-11-14T08:17:03'Системная информация: хост: 'LAPTOP-2PL6I9SD', ip: '192.168.43.30', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '11.0.1'Информация о драйвере: org.openqa.selenium.firefox.FirefoxDriver Capabilities {acceptInsecureCerts: true, browserName: firefox, browserVersion: 67.0.3, javascriptEnabled: true, moz:accessibilityChecks: false, moz:buildID: 20190618025334, geckodriverVersion: 0.24.0, moz:headless: false, moz:processID: 15188, moz:profile: C:\Users\SWATHI\AppData\Loc..., moz:shutdownTimeout: 60000, moz:useNonSpecCompliantPointerOrigin: false, moz:webdriverClick: true, pageLoadStrategy: нормальная, платформа: WINDOWS, platformName: WINDOWS, platformVersion: 10.0, вращаемая: ложь, setWindowRect: true, strictFileInteractability: false, тайм-ауты: {неявный: 0, pageLoad: 300000, скрипт: 30000}, необработанный PromptBehavior: отклонить и уведомить} Идентификатор сеанса: e2401e63-ffda-45cd-a73f-ea418e38236d в org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait.java:95) в org.openqa.selenium.supportaa. Java:272) на basic_tests.LoginFlightTest.main(LoginFlightTest.java:33)

1 ответ

Этот подход потерпит неудачу, потому что иногда сетевая задержка может быть длительной, и кнопка входа в систему исчезает. Однако следующая страница еще не будет загружена. Таким образом, положительные случаи также могут потерпеть неудачу. Вы должны попытаться подождать какой-то компонент на следующей странице, который загружается после входа в систему.

В отрицательных тестовых примерах вы можете дождаться соответствующего сообщения об ошибке, которое будет отображено.

Я проверил ваше решение. Возможно, проблема связана с тем, что ваш н / б или сайт не отвечает быстро. ваш сценарий работает правильно, без каких-либо проблем. попробуйте еще раз с помощью приведенного ниже сценария и не забудьте обновить путь к драйверу Chrome.

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class Sampletest {
    public static void main(String[] args) {


    System.setProperty("webdriver.chrome.driver", "C:\\Users\\win32\\76.0.3809.68\\chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.manage().window().maximize();
    //driver.manage().timeouts().implicitlyWait(12, TimeUnit.SECONDS);
    driver.get("http://newtours.demoaut.com/");
    driver.findElement(By.name("userName")).sendKeys("myworld");
    driver.findElement(By.name("password")).sendKeys("myworld");
    driver.findElement(By.name("login")).click();
    WebDriverWait wait = new WebDriverWait(driver, 60);
    wait.until(ExpectedConditions.invisibilityOfElementLocated(By.name("login")));
    String titleActual = driver.getTitle();
    if (titleActual.equals("titleExpected")) {
        System.out.println("Login successful");
    } else {
    }
    driver.close();
}
}
Другие вопросы по тегам