升级后 Selenium WebDriver 3.1.0
我收到了警告
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(30));
警告11'OpenQA.Selenium.ITimeouts.SetScriptTimeout(System.TimeSpan)'已废弃:'此方法将在未来版本中删除 . 请改为设置AsynchronousJavaScript属性 .
所以我改成了
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);
它在 ChromeDriver
下运行正常,但是当我尝试 FireFoxDriver
时,测试在此行上失败,抛出异常
结果消息:System.InvalidOperationException:缺少'type'参数(IndexOutOfBounds)结果StackTrace:在OpenQA.Selenium.Remium.mlenver.Execute(String driverCommandToExecute,Dictionary在OpenQA.Selenium.Remium.Remote.mlen上的OpenQA.Selenium.Remote.RemoteWebDriver.InternalExecute(String driverCommandToExecute,Dictionary'2参数)中的OpenQA.Selenium.Remote.RemoteTimeouts.ExecuteSetTimeout(String timeoutType,TimeSpan timeToWait)的OpenQA.Selenium.Remote.RemoteTimeouts.set_ImplicitWait(TimeSpan) OpenQA.Selenium.Support.Events.EventFiringWebDriver.EventFiringTimeouts.set_ImplicitWait(TimeSpan value)
怎么解决这个?
2 回答
在
github
中挖掘了source code后,我发现ImplicitWait
set
和get
方法正在使用(在较低级别)ICommandExecutor
来设置和获取值 . 唯一的FireFoxDriver
构造函数在父RemoteWebDriver
中初始化此变量是这触发了基础构造函数
FirefoxDriver
中的方法CreateExecutor
(在初始化基础时在构造函数中调用)检查firefoxOptions
成员UseLegacyImplementation
并在false
时返回DriverServiceCommandExecutor
,这不能解决问题,而FirefoxDriverCommandExecutor
在true
时返回 .UseLegacyImplementation
默认为false
,因此应将其设置为true
对我有用的解决方案是
我的项目中遇到了同样的问题 . 但是,短期解决方案是回滚到以前版本的webdriver .
我希望这有帮助!