Selenium - 如何改变" CommandTimeout" WebDriver声明后

时间:2016-12-19 20:53:14

标签: c# selenium firefox selenium-webdriver timeout

我宣布我的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超时的大多数帖子都关注隐含等待或其他各种超时,而不是驱动程序声明中指定的超时值。

1 个答案:

答案 0 :(得分:1)

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

查看selenium source code,您可以看到commandTimeout参数已传递到RemoteWebdriver.ICommandExecutor字段,即private。这意味着,在初始化之后,将无法再访问或更改命令超时。

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

如果您偶尔需要高超时,通常最好将commandTimeout设置为较高的值,并使用ImplicitWait&来管理超时。合。