pageLoadTimeout не работает в Selenium - Java
Я тестирую веб-сайт на хосте Linux. Страница, к которой я обращаюсь, загружается бесконечно, поэтому я пытаюсь установить pageLoadTimeout для селена. Firefox запускается правильно, но URL не загружается / не перемещается / не добавляется в url bar.just пустое окно Firefox. Я также не вижу никаких ошибок.
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().pageLoadTimeout(2, TimeUnit.SECONDS);
driver.get("http://www.example.com");
Однако если я удалю driver.manage().timeouts().pageLoadTimeout(2, TimeUnit.SECONDS);
код работает нормально
Версия Selenium: 3.14.0;
драйвер геккона: 18 - linux (протестировано с гекконом 16,17, тоже самое)
браузер: firefox-52
ОС / платформа: Linux
Если такого рода проблемы, как мне убедиться, что мой драйвер завершает работу через 5 минут. Хост будет поддерживать только Firefox 52.
Я проверил эту ссылку, но не решил мою проблему.
Спасибо Jk
2 ответа
Вы можете установить стратегию загрузки страницы для браузера, которая будет заставлять страницу не ждать полной загрузки страницы для выполнения других ваших команд Selenium. Ниже приведен пример кода на Java. Есть три поддерживаемых значения:
нормальный
Это состояние заставляет Selenium ждать полной загрузки страницы (загруженный и проанализированный html-контент и субресурсы).
нетерпеливый
Это состояние заставляет Selenium ожидать события DOMContentLoaded (загружается и анализируется только HTML-контент).
никто
Эта стратегия приводит к тому, что Selenium возвращается сразу после полного получения исходного содержимого страницы (загрузка содержимого html).
По умолчанию, когда Selenium загружает страницу, она следует обычной pageLoadStrategy.
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("pageLoadStrategy", "eager");
FirefoxOptions opt = new FirefoxOptions();
opt.merge(caps);
WebDriver driver = new FirefoxDriver(opt);
driver.get("https://www.google.com/");
Если вас интересует только HTML-код страницы, лучше используйте стратегию "нетерпеливый".
Вы не упомянули URL- адрес, к которому пытаетесь обратиться, но pageLoadTimeout для Selenium работает, как и ожидалось, с комбинацией Selenium v3.14.0, GeckoDriver v0.23.0 и Firefox Quantum v62.0.3. Я могу увидеть ожидаемый вывод на консоли в следующем примере, который печатает TimeoutException произошло. Выход из программы при каждом срабатывании pageLoadTimeout:
Блок кода:
import java.util.concurrent.TimeUnit; import org.openqa.selenium.TimeoutException; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class A_Firefox_Test { public static void main(String[] args) { System.setProperty("god.bless.us", "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"); } catch (TimeoutException e) { System.out.println("TimeoutException occurred. Quiting the program."); } driver.quit(); } }
Консольный вывод:
1539157195615 Marionette INFO Listening on port 1920 Oct 10, 2018 1:09:56 PM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: W3C Oct 10, 2018 1:10:00 PM org.openqa.selenium.remote.ErrorCodes toStatus INFO: HTTP Status: '500' -> incorrect JSON status mapping for 'timeout' (408 expected) TimeoutException occurred. Quiting the program.
Вы можете найти подробную трассировку стека в pageLoadTimeout в Selenium не работает
- Вы можете найти Pythonic подход к
pageLoadTimeout
в Как установить время ожидания "driver.get" для Python Selen 3.8.0?