如何在Selenium 3.1.0中设置ImplicitWait

时间:2017-02-22 09:34:17

标签: c# selenium selenium-webdriver selenium-firefoxdriver

升级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(时间跨度   值)

如何解决这个问题?

2 个答案:

答案 0 :(得分:6)

在挖掘github中的source code后,我发现ImplicitWait setget方法正在使用(在较低级别){{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并在UseLegacyImplementationDriverServiceCommandExecutor返回false 1}},但没有解决问题,FirefoxDriverCommandExecutortrue。默认情况下,UseLegacyImplementationfalse,因此应将其设置为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。

我希望这有帮助!