升级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时,测试在这一行失败了,引发了一个异常
结果消息:缺少“类型”参数(IndexOutOfBounds)结果( OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)在OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute,Dictionary'2参数)在OpenQA.Selenium.Remote.RemoteWebDriver.InternalExecute(String driverCommandToExecute,字典‘2参数)在OpenQA.Selenium.Remote.RemoteTimeouts.ExecuteSetTimeout(String timeoutType,(以OpenQA.Selenium.Remote.RemoteTimeouts.set_ImplicitWait(TimeSpan值计算)( OpenQA.Selenium.Support.Events.EventFiringWebDriver.EventFiringTimeouts.set_ImplicitWait(TimeSpan值))
如何解决这个问题?
发布于 2017-02-22 09:34:17
在深入研究源代码 in github之后,我发现ImplicitWait、set和get方法正在使用(在较低级别) ICommandExecutor来设置和获取值。在父FireFoxDriver中初始化此变量的唯一RemoteWebDriver构造函数是
public FirefoxDriver(FirefoxDriverService service, FirefoxOptions options, TimeSpan commandTimeout) : base(CreateExecutor(service, options, commandTimeout), ConvertOptionsToCapabilities(options))它触发基构造函数。
public RemoteWebDriver(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities)FirefoxDriver中的方法FirefoxDriver(初始化基时在构造函数中调用)检查firefoxOptions成员UseLegacyImplementation,并在未解决问题的false时返回DriverServiceCommandExecutor,当true时返回FirefoxDriverCommandExecutor。默认情况下,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));发布于 2017-03-06 10:38:12
我的项目中也有同样的问题。然而,一个短期的解决方案将是回滚到以前版本的webdriver。
我希望这能帮到你!
https://stackoverflow.com/questions/42387701
复制相似问题