首页 文章

如何在Selenium 3.1.0中设置ImplicitWait

提问于
浏览
1

升级后 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 回答

  • 5

    github 中挖掘了source code后,我发现 ImplicitWait setget 方法正在使用(在较低级别) 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 中的方法 CreateExecutor (在初始化基础时在构造函数中调用)检查 firefoxOptions 成员 UseLegacyImplementation 并在 false 时返回 DriverServiceCommandExecutor ,这不能解决问题,而 FirefoxDriverCommandExecutortrue 时返回 . 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));
    
  • 3

    我的项目中遇到了同样的问题 . 但是,短期解决方案是回滚到以前版本的webdriver .

    我希望这有帮助!

相关问题