我像这样声明我的Selenium WebDriver引用:
var driver = new FirefoxDriver(service,
new FirefoxOptions {
BrowserExecutableLocation = "XXXX",
Profile = firefoxProfile,
UseLegacyImplementation = true },
new TimeSpan(0, 1, 30));
它在99%的情况下工作得很好,但是在某些情况下,我想将默认的“命令超时”更改为90秒以外的时间。如何在不重新定义驱动程序的情况下做到这一点?
我已经探索了以下类的所有方法/属性,似乎改变它们都没有任何效果:
driver.Manage().Timeouts()
还有这篇文章,但它与“命令超时”无关。有这个,它并没有真正涵盖驱动程序创建后。大多数关于Selenium超时的帖子都与隐式等待或其他各种超时有关,而不是驱动程序声明中指定的超时值。
为什么之后需要设置命令Timeout
?它实际上只是驱动程序不再响应时的备份。它与驱动浏览器本身没有任何关系。
查看selenium源代码,您可以看到命令Timeout
参数被传递到RemoteWebdriver. ICommand dExecator
字段中,该字段是私有
。这意味着,在初始化之后,无法再访问或更改命令超时。
一个非常老套的,当然也不推荐的“解决方案”可能是使用反射来访问属性。然而,这当然是不推荐的,因为它在很大程度上取决于您使用的驱动程序,因此随时可能中断。
如果你偶尔需要高超时,通常最好将命令Timeout
设置为一个高值,并使用IMITITER
管理超时