提问者:小点点

Selenium-WebDriver声明后如何更改“命令超时”


我像这样声明我的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超时的帖子都与隐式等待或其他各种超时有关,而不是驱动程序声明中指定的超时值。


共1个答案

匿名用户

为什么之后需要设置命令Timeout?它实际上只是驱动程序不再响应时的备份。它与驱动浏览器本身没有任何关系。

查看selenium源代码,您可以看到命令Timeout参数被传递到RemoteWebdriver. ICommand dExecator字段中,该字段是私有。这意味着,在初始化之后,无法再访问或更改命令超时。

一个非常老套的,当然也不推荐的“解决方案”可能是使用反射来访问属性。然而,这当然是不推荐的,因为它在很大程度上取决于您使用的驱动程序,因此随时可能中断。

如果你偶尔需要高超时,通常最好将命令Timeout设置为一个高值,并使用IMITITER管理超时