Как подождать страницу перед тем, как перейти на другую страницу в Selenium WebDriver с помощью Java?

Я новичок в Selenium. Я использую Selenium WebDriver с Java. Я использую eclipse как IDE. Я написал код для страницы входа и успешно запущен. Теперь я хочу перейти на желаемую страницу после успешного входа в систему, но я хочу подождать немного времени, прежде чем перейти на другую страницу. Как я могу подождать страницу перед загрузкой другой страницы?

5 ответов

Насколько я знаю, существует 3 способа:

  • Неявное ожидание: (оно применимо для всех элементов на странице)

    driver.manage().timeouts().implicitlyWait(A_GIVEN_NUMBER, TimeUnit.SECONDS);

  • Явное ожидание: (применимо для конкретного элемента)

    WebDriverWait.until(CONDITION_THAT_FINDS_AN_ELEMENT);

Более конкретный код выглядит следующим образом:

WebDriverWait wait = new WebDriverWait(driver, 40);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));
  • Использование Thread:

    Thread.sleep(NUMBER_OF_MILLIS);


Я бы посоветовал не использовать Thread.sleep(NUMBER_OF_MILLS). Он не будет стабильным, и вы попадете в ситуации, когда сон не будет достаточно длинным.

Если вы просто ожидаете загрузки DOM, то событие WebDriver, которое запускает загрузку страницы, всегда будет ждать загрузки DOM, прежде чем возвращать управление.

Однако, если AJAX используется для изменения HTML после DOM, я бы посоветовал вам использовать WebDriverWait и ждать, пока не произойдет известное событие (например, Object появляется в html, текстовые изменения и т.д.)

Если вы уберете одну вещь от этого поста, прекратите использовать Сон!


Использовать класс WebDriverWait

Selenium явное/неявное ожидание

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

WebDriver _driver = new WebDriver();
WebDriverWait _wait = new WebDriverWait(_driver, TimeSpan(0, 1, 0));
_wait.Until(d => d.FindElement(By.Id("Id_Your_UIElement"));


Попробуйте использовать implicitlyWait в течение 60 секунд. как указано в Selenium WebDriver:

driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);//wait for 60 sec.

Если вам нужно подождать еще, сделайте это 80, 90 и т.д.

Для Selenium RC вы можете использовать код, как показано ниже:

selenium.waitForPageToLoad("60000");//wait for 60 sec.

Это можно сделать, используя Thread, как показано ниже:

Thread.sleep(NUMBER_OF_MILLIS);

Для явного ожидания в WebDriver, идентифицируйте элемент на странице загрузки и напишите код, как показано ниже:

WebDriverWait wait = new WebDriverWait(driver, 40);//wait for 40 sec.
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));


Я использовал этот подход. Попытайтесь выяснить, какой элемент на странице загружен последним. Принимая локатор этого элемента и проверяя его существование с помощью isDisplayed, вы сможете увидеть, когда вся страница загружается

licensed under cc by-sa 3.0 with attribution.