it-swarm.com.ru

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

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

6
Nasrin Naher

Насколько я знаю, есть 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);

12
M. Abbas

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

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

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

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

4
Robbie Wareham

Используйте класс WebDriverWait

Селен явное/неявное ожидание

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

WebDriver _driver = new WebDriver();
WebDriverWait _wait = new WebDriverWait(_driver, TimeSpan(0, 1, 0));

_wait.Until(d => d.FindElement(By.Id("Id_Your_UIElement"));
1
r3ap3r

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

0
Pinakin Chaubal

Попробуйте использовать неявно ждать в течение 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")));
0
Ripon Al Wasim