Slenium-Java: Wait.until(ExpectedConditions.invisibilityOfElementLocated()) всегда завершается неудачно для негативных сценариев
ExpectedConditions.invisibilityOfElementLocated throws Timeout Exception
и завершает программу.
шаг
Запустите браузер и перейдите на страницу входа.
Введите имя пользователя, пароль и нажмите Войти
Поскольку загрузка занимает разное время, я хочу подождать, пока кнопка входа не станет невидимой
Это хорошо работает для положительных случаев, когда я использую действительные учетные данные и нажимаю на кнопку входа. но это всегда дает сбой в отрицательном случае, т.е. когда я пытаюсь с недопустимыми комбинациями имени пользователя и пароля 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();
}
}