Как сделать селен, чтобы перезагрузить нужный URL, если это занимает слишком много времени загрузки
Я хочу, чтобы селен заставил браузер перезагрузить загружаемую страницу, если процесс загрузки занимает слишком много времени.
Из Stackru у меня есть этот код
new WebDriverWait(driver, 30).until((ExpectedCondition<Boolean>) wd -> ((JavascriptExecutor) wd)
.executeScript("return document.readyState").equals("complete"));
будет ждать, пока страница полностью загрузится, но я хочу, чтобы она была перезагружена, если это займет более 30 секунд.
Как я могу этого достичь?
3 ответа
Чтобы перезагрузить веб-страницу в случае, если процесс загрузки занимает слишком много времени, вы можете настроить pageLoadTimeout. pageLoadTimeout
устанавливает время ожидания загрузки страницы до выдачи ошибки. Если время ожидания отрицательное, загрузка страниц может быть неопределенной.
Пример (с использованием Selenium v3.141.59 и GeckoDriver v0.24.0):
Блок кода:
public class pageLoadTimeout { public static void main(String[] args) { System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe"); WebDriver driver=new FirefoxDriver(); driver.manage().timeouts().pageLoadTimeout(2, TimeUnit.SECONDS); try{ driver.get("https://www.booking.com/hotel/in/the-taj-mahal-palace-tower.html?label=gen173nr-1FCAEoggJCAlhYSDNiBW5vcmVmaGyIAQGYATG4AQbIAQzYAQHoAQH4AQKSAgF5qAID;sid=338ad58d8e83c71e6aa78c67a2996616;dest_id=-2092174;dest_type=city;dist=0;group_adults=2;hip_dst=1;hpos=1;room1=A%2CA;sb_price_type=total;srfid=ccd41231d2f37b82d695970f081412152a59586aX1;srpvid=c71751e539ea01ce;type=total;ucfs=1&#hotelTmpl"); // do your other work here }catch(WebDriverException e){ System.out.println("WebDriverException occured"); } driver.quit(); } }
Консольный вывод:
1565680787633 mozrunner::runner INFO Running command: "C:\\Program Files\\Mozilla Firefox\\firefox.exe" "-marionette" "-foreground" "-no-remote" "-profile" "C:\\Users\\Debanjan.B\\AppData\\Local\\Temp\\rust_mozprofile.3jw3aiyfNAiQ" 1565680826515 Marionette INFO Listening on port 56499 1565680827329 Marionette WARN TLS certificate errors will be ignored for this session Aug 13, 2019 12:50:28 PM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: W3C Aug 13, 2019 12:50:31 PM org.openqa.selenium.remote.ErrorCodes toStatus WebDriverException occured
Вы можете найти соответствующее обсуждение в pageLoadTimeout в Selenium не работает
Вы можете найти подробное обсуждение в разделе Есть ли у нас какие-либо общие функции, чтобы проверить, полностью ли загружена страница в Selenium?
WebDriverWait
за исключением тайм-аута. Поместите свой код внутри try/catch
и перезагрузите страницу при исключении тайм-аута:
try {
new WebDriverWait(driver, 30).until((ExpectedCondition<Boolean>) wd -> ((JavascriptExecutor) wd)
.executeScript("return document.readyState").equals("complete"));
} catch (TimeoutException e) {
// log a timeout
// System.out.println("Page load timeout, refresh.");
driver.navigate().refresh();
}