C#使用实现的显式转换获取强制转换异常

时间:2018-04-10 10:19:38

标签: c# selenium casting

我有外部功能:

public int SetHeight(IWebElement column)
{
    ExtendedElement.Get(column).Click();
}

它在调用中收到的column参数已经是具体类型ExtendedElement,但由于它接受任何IWebElement我需要Get方法。

以下是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 : Unable to cast object of type 'Core.Helper.ExtendedElement' to type 'OpenQA.Selenium.Remote.RemoteWebElement'.

那么,为什么呢?如果我过于复杂化并且需要改变设计 - 应该瞄准什么?

1 个答案:

答案 0 :(得分:1)

要实现保留其原始方法的自定义网络元素,请扩展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)
    { }

}