pageLoadTimeout 在 Selenium 中不起作用 - Java
pageLoadTimeout is not working in Selenium - Java
我正在 linux host.The 页面中测试一个网站,我正在无限地访问负载,所以我正在尝试为 selenium 设置 pageLoadTimeout。
Firefox 被正确触发,但 URL 不是 loading/navigating/added in url bar.just blank firefox window.I 我也没有看到任何错误。
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().pageLoadTimeout(2, TimeUnit.SECONDS);
driver.get("http://www.example.com");
但是如果我删除 driver.manage().timeouts().pageLoadTimeout(2, TimeUnit.SECONDS);
代码工作正常
硒版本:3.14.0;
gecko 驱动程序:18 - linux(使用 gecko 16,17 测试也是同样的问题)
浏览器:firefox-52
os/platform : linux
如果出现此类问题,我如何确保我的驱动程序在 5 minute.Host 后自动退出将仅支持 firefox 52。
我检查了这个 但没有解决我的问题。
谢谢
Jk
您可以为浏览器设置页面加载策略,这样页面就不会等待其他 Selenium 命令执行的完整页面加载。下面是 Java 中的示例代码片段。支持三个值:
正常
此策略导致 Selenium 等待整个页面加载(html 内容和子资源已下载并解析)。
渴望
此策略导致 Selenium 等待 DOMContentLoaded 事件(html 仅下载和解析内容)。
none
此策略导致 Selenium 在完全接收初始页面内容(html 内容已下载)后立即 return。
默认情况下,当 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 感兴趣,最好使用 "eager" 策略。
您没有提到您尝试访问的 url 但是 pageLoadTimeout for Selenium 与 Selenium v3.14.0、GeckoDriver v0.23.0 和 Firefox Quantum v62.0.3 一起正常工作组合。我能够通过以下打印 TimeoutException occurred 的示例在控制台上看到预期的输出。每当触发 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.
您可以在
中找到详细的堆栈跟踪
- 您可以在
中找到 Pythonic 方法 pageLoadTimeout
我正在 linux host.The 页面中测试一个网站,我正在无限地访问负载,所以我正在尝试为 selenium 设置 pageLoadTimeout。 Firefox 被正确触发,但 URL 不是 loading/navigating/added in url bar.just blank firefox window.I 我也没有看到任何错误。
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().pageLoadTimeout(2, TimeUnit.SECONDS);
driver.get("http://www.example.com");
但是如果我删除 driver.manage().timeouts().pageLoadTimeout(2, TimeUnit.SECONDS);
代码工作正常
硒版本:3.14.0;
gecko 驱动程序:18 - linux(使用 gecko 16,17 测试也是同样的问题)
浏览器:firefox-52
os/platform : linux
如果出现此类问题,我如何确保我的驱动程序在 5 minute.Host 后自动退出将仅支持 firefox 52。
我检查了这个
谢谢 Jk
您可以为浏览器设置页面加载策略,这样页面就不会等待其他 Selenium 命令执行的完整页面加载。下面是 Java 中的示例代码片段。支持三个值:
正常
此策略导致 Selenium 等待整个页面加载(html 内容和子资源已下载并解析)。
渴望
此策略导致 Selenium 等待 DOMContentLoaded 事件(html 仅下载和解析内容)。
none
此策略导致 Selenium 在完全接收初始页面内容(html 内容已下载)后立即 return。
默认情况下,当 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 感兴趣,最好使用 "eager" 策略。
您没有提到您尝试访问的 url 但是 pageLoadTimeout for Selenium 与 Selenium v3.14.0、GeckoDriver v0.23.0 和 Firefox Quantum v62.0.3 一起正常工作组合。我能够通过以下打印 TimeoutException occurred 的示例在控制台上看到预期的输出。每当触发 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