将IWebdriver模拟对象转换为IJavaScriptExecutor

时间:2013-02-20 08:58:46

标签: c# c#-4.0 mocking selenium-webdriver

如何将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 个答案:

答案 0 :(得分:2)

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

public interface IWebDriver : ISearchContext, IDisposable {}

public interface ISearchContext {}

public interface IJavaScriptExecutor {}

如果要对模拟的实例执行强制转换,则需要使用Object属性,该属性是被模拟的实际类型,如:

var jsExecutor = (IJavaScriptExecutor) _mockBrowserDriver.Object;

在这种情况下,您仍然会收到无效的强制转换异常。

顺便说一句,你为什么试图模仿IWebDriver?由于它倾向于用于验收测试,您是否正在尝试对您的验收测试代码进行单元测试?如果没有,您是否在生产代码中实际使用IWebDriver

答案 1 :(得分:1)

我通过添加以下声明

找到了解决方案
_mockBrowserDriver.As<IJavaScriptExecutor>();

感谢查尔斯。 感谢levelnis对该死的快速回复,我很惊讶!!!

  1. 是的我正在通过准备模拟对象来编写单元测试用例。
  2. 用于测试自定义硒行为的单元测试用例。