我正在linux主机上测试一个网站。我正在访问的页面是无限加载的,所以我尝试为selenium设置pageLoadTimeout。 Firefox已正确触发,但URL栏上的URL无法加载/导航/添加。只是空白的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);
代码,效果很好
硒版本:3.14.0;
gecko驱动程序:18-Linux(已通过gecko 16,17测试,同样存在问题)
浏览器:firefox-52
os / platform:Linux
如果出现此类问题,如何确保5分钟后我的驱动程序自行退出。主机将仅支持firefox 52。
我检查了此link,但没有解决我的问题。
谢谢 Jk
答案 0 :(得分:1)
您可以为浏览器设置页面加载策略,这将使页面不等待其他Selenium命令执行的整个页面加载。以下是Java中的示例代码片段。支持三个值:
普通
这种状态导致Selenium等待整个页面加载(已下载并解析HTML内容和子资源)。
渴望
这种状态导致Selenium等待DOMContentLoaded事件(仅下载和解析html内容)。
无
此策略使Selenium在完全接收到初始页面内容(已下载html内容)后立即返回。
默认情况下,当Selenium加载页面时,它遵循 normal 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感兴趣,最好使用“渴望”策略。
答案 1 :(得分:1)
您没有提到要尝试访问的 url ,但是 Selenium 的 pageLoadTimeout 可以与 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
的 Pythonic 方法