我有外部函数:
public int SetHeight(IWebElement column)
{
ExtendedElement.Get(column).Click();
}
它在调用中收到的 column
参数已经是具体类型 ExtendedElement
,但是因为它接受任何 IWebElement
我需要那个 获取
方法。
这里是 ExtendedElement
的重要部分:
public class ExtendedElement : IWebElement
{
private IWebElement _Element { get; set; }
private ExtendedElement() {}
public static ExtendedElement Get(IWebElement element)
{
return new ExtendedElement()
{
_Element = (RemoteWebElement)element
};
}
public static explicit operator RemoteWebElement(ExtendedElement element)
{
return (RemoteWebElement)element._Element;
}
// other impmlementations
}
如何写我从Microsoft读到的转换
由于某种原因,当代码运行时出现异常:
System.InvalidCastException:无法将“Core.Helper.ExtendedElement”类型的对象转换为类型“OpenQA.Selenium.Remote.RemoteWebElement”。
那么,这是为什么呢?如果我让事情过于复杂并且需要更改设计 - 目标应该是什么?
最佳答案
要实现保留其原始方法的自定义 Web 元素,请扩展 RemoteWebElement
:
public class ExtendedElement : RemoteWebElement
{
public static ExtendedElement Get(IWebElement element)
{
RemoteWebDriver driver = (RemoteWebDriver)element.WrappedDriver;
string id = (string)typeof(RemoteWebElement)
.GetProperty("Id", BindingFlags.NonPublic | BindingFlags.Instance)
.GetValue(element, null);
return new ExtendedElement(driver, id);
}
public ExtendedElement(RemoteWebDriver driver, string id)
: base(driver, id)
{ }
}
关于C# 通过实现的显式转换获取转换异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49751125/