如何将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'.
答案 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对该死的快速回复,我很惊讶!!!