Как сделать селен, чтобы перезагрузить нужный 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();
}

Пытаться _driver.Navigate().Refresh();

Другие вопросы по тегам