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

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

5 ответов


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

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

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

  2. явное ожидание: (применимо для определенного элемента)

    WebDriverWait.until(CONDITION_THAT_FINDS_AN_ELEMENT);

более конкретный код, как показано ниже:

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

    Thread.sleep(NUMBER_OF_MILLIS);


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

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

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

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


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

селен явное / неявное ждать

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

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.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, вы сможете увидеть, когда вся страница загружается