我宣布我的Selenium WebDriver引用如下:
var driver = new FirefoxDriver(service,
new FirefoxOptions {
BrowserExecutableLocation = "XXXX",
Profile = firefoxProfile,
UseLegacyImplementation = true },
new TimeSpan(0, 1, 30));
它在99%的情况下都很有效,但是在某些情况下我想要更改默认值" commandTimeout"超过90秒的东西。如何在不重新定义驱动程序的情况下执行此操作?
我已经探索了以下课程的所有方法/属性,并且似乎没有任何改变它们有任何影响:
driver.Manage().Timeouts()
还有this post,但它与" commandTimeout"无关。那些this,在创建驱动程序之后并没有真正覆盖。关于Selenium超时的大多数帖子都关注隐含等待或其他各种超时,而不是驱动程序声明中指定的超时值。
答案 0 :(得分:1)
为什么之后需要设置commandTimeout
?它实际上只是一个驱动程序不再响应的备份。它与驱动浏览器本身没有任何关系。
查看selenium source code,您可以看到commandTimeout
参数已传递到RemoteWebdriver.ICommandExecutor
字段,即private
。这意味着,在初始化之后,将无法再访问或更改命令超时。
一个非常hacky,当然不推荐的“解决方案”,可能是使用反射来访问该属性。然而,这肯定不推荐,因为它在很大程度上取决于您使用的驱动程序,因此可能随时中断。
如果您偶尔需要高超时,通常最好将commandTimeout
设置为较高的值,并使用ImplicitWait
&来管理超时。合。