如何在 Selenium 3.1.0 中设置 ImplicitWait
How to set ImplicitWait in Selenium 3.1.0
升级后 Selenium WebDriver 3.1.0
我在
收到警告
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(30));
Warning 11 'OpenQA.Selenium.ITimeouts.SetScriptTimeout(System.TimeSpan)' is obsolete: 'This method will be removed in a future version. Please set the AsynchronousJavaScript property instead.'
所以我改成了
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);
它在 ChromeDriver
上运行良好,但是当我尝试 FireFoxDriver
时,这条线的测试失败,抛出异常
Result Message: System.InvalidOperationException : Missing 'type'
parameter (IndexOutOfBounds) Result StackTrace: at
OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response
errorResponse) at
OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String
driverCommandToExecute, Dictionary`2 parameters) at
OpenQA.Selenium.Remote.RemoteWebDriver.InternalExecute(String
driverCommandToExecute, Dictionary'2 parameters) at
OpenQA.Selenium.Remote.RemoteTimeouts.ExecuteSetTimeout(String
timeoutType, TimeSpan timeToWait) at
OpenQA.Selenium.Remote.RemoteTimeouts.set_ImplicitWait(TimeSpan value)
at
OpenQA.Selenium.Support.Events.EventFiringWebDriver.EventFiringTimeouts.set_ImplicitWait(TimeSpan
value)
如何解决这个问题?
在 github
中挖掘 source code 后,我发现 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
中的方法CreateExecutor
(初始化基时在构造函数中调用)检查firefoxOptions
成员UseLegacyImplementation
和returnsDriverServiceCommandExecutor
当它 false
时,没有解决问题,而 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));
我在我的项目中遇到了同样的问题。然而,短期解决方案是回滚到以前版本的 webdriver。
希望对您有所帮助!
升级后 Selenium WebDriver 3.1.0
我在
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(30));
Warning 11 'OpenQA.Selenium.ITimeouts.SetScriptTimeout(System.TimeSpan)' is obsolete: 'This method will be removed in a future version. Please set the AsynchronousJavaScript property instead.'
所以我改成了
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);
它在 ChromeDriver
上运行良好,但是当我尝试 FireFoxDriver
时,这条线的测试失败,抛出异常
Result Message: System.InvalidOperationException : Missing 'type' parameter (IndexOutOfBounds) Result StackTrace: at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse) at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters) at OpenQA.Selenium.Remote.RemoteWebDriver.InternalExecute(String driverCommandToExecute, Dictionary'2 parameters) at OpenQA.Selenium.Remote.RemoteTimeouts.ExecuteSetTimeout(String timeoutType, TimeSpan timeToWait) at OpenQA.Selenium.Remote.RemoteTimeouts.set_ImplicitWait(TimeSpan value) at OpenQA.Selenium.Support.Events.EventFiringWebDriver.EventFiringTimeouts.set_ImplicitWait(TimeSpan value)
如何解决这个问题?
在 github
中挖掘 source code 后,我发现 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
中的方法CreateExecutor
(初始化基时在构造函数中调用)检查firefoxOptions
成员UseLegacyImplementation
和returnsDriverServiceCommandExecutor
当它 false
时,没有解决问题,而 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));
我在我的项目中遇到了同样的问题。然而,短期解决方案是回滚到以前版本的 webdriver。
希望对您有所帮助!