2013-02-20 150 views
1

如何将IWebdriver模拟对象转换为IJavaScriptExecutor将IWebdriver模拟对象强制转换为IJavaScriptExecutor

我的代码:

private Mock<IWebDriver> _mockBrowserDriver; 
_mockBrowserDriver = new Mock<IWebDriver>(); 
var jsExecutor = (IJavaScriptExecutor) _mockBrowserDriver; 

结果:

Unable to cast object of type 'Castle.Proxies.IWebDriverProxy' to type 'OpenQA.Selenium.IJavaScriptExecutor'. 

回答

2

什么是你想在这里完成? IJavaScriptExecutor不会从IWebDriver继承,反之亦然。从反编译来源,这里有签名:

public interface IWebDriver : ISearchContext, IDisposable {} 

public interface ISearchContext {} 

public interface IJavaScriptExecutor {} 

如果你想在嘲笑实例执行强制类型转换,你需要使用Object属性,它是实际的类型被嘲笑,如:

var jsExecutor = (IJavaScriptExecutor) _mockBrowserDriver.Object; 

在这个例子中,你仍然会得到一个无效的转换异常。

顺便说一句,你为什么要模拟IWebDriver?由于它倾向于用于验收测试,您是否试图单元测试验收测试代码?如果没有,你是否在生产代码中使用IWebDriver

1

我通过添加以下语句

_mockBrowserDriver.As<IJavaScriptExecutor>(); 

由于查尔斯找到了解决办法。 感谢levelnis的该死的快速回复,我很惊讶!

  1. 是的我准备模拟对象写一个单元测试用例。
  2. 用于测试自定义硒操作的单元测试用例。