升级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:at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(响应 errorResponse)at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(字符串 driverCommandToExecute,Dictionary`2参数)at OpenQA.Selenium.Remote.RemoteWebDriver.InternalExecute(字符串 driverCommandToExecute,Dictionary'2参数)at OpenQA.Selenium.Remote.RemoteTimeouts.ExecuteSetTimeout(字符串 timeoutType,TimeSpan timeToWait)at OpenQA.Selenium.Remote.RemoteTimeouts.set_ImplicitWait(TimeSpan value) 在 OpenQA.Selenium.Support.Events.EventFiringWebDriver.EventFiringTimeouts.set_ImplicitWait(时间跨度 值)
如何解决这个问题?
答案 0 :(得分:6)
在挖掘github
中的source code后,我发现ImplicitWait
set
和get
方法正在使用(在较低级别){{1}设置并获取值。在父ICommandExecutor
中初始化此变量的唯一FireFoxDriver
构造函数是
RemoteWebDriver
触发基础构造函数
public FirefoxDriver(FirefoxDriverService service, FirefoxOptions options, TimeSpan commandTimeout) : base(CreateExecutor(service, options, commandTimeout), ConvertOptionsToCapabilities(options))
public RemoteWebDriver(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities)
中的方法CreateExecutor
(在初始化基础时在构造函数中调用)检查FirefoxDriver
成员firefoxOptions
并在UseLegacyImplementation
时DriverServiceCommandExecutor
返回false
1}},但没有解决问题,FirefoxDriverCommandExecutor
时true
。默认情况下,UseLegacyImplementation
为false
,因此应将其设置为true
对我有用的解决方案是
FirefoxOptions firefoxOptions = new FirefoxOptions
{
Profile = fxProfile, // I'm using FirefoxProfile as well
UseLegacyImplementation = true
};
IWebDriver driver = new FirefoxDriver(FirefoxDriverService.CreateDefaultService(), firefoxOptions, TimeSpan.FromSeconds(30));
答案 1 :(得分:3)
我的项目中遇到了同样的问题。但是,短期解决方案是回滚到以前版本的webdriver。
我希望这有帮助!