C# 通过实现的显式转换获取转换异常

标签 c# selenium casting

我有外部函数:

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/

相关文章:

c# - Unity 4.6p1 UI 在任何版本中崩溃

c# - 构建失败 : Outlook 2010 VSTO Add-In

c# - 如何在 Selenium C# 中使用现有的 Firefox 配置文件?

excel - 用于从 Internet Explorer 转换为 Edge 或 chrome 浏览器的 VBA 脚本

java - 为什么 Java 强制强制转换泛型类型?

c++ - 为什么对对象进行类型转换不会更改其地址?有关对象类型的信息存储在哪里?

c# - 数组中的不同类型,如何知道将它们从数组中取出时将它们转换为什么?

c# - ASP.Net MVC :How to rewrite url by middleware in ASP. 网络核心

c# - 解析确切的自定义时间格式?

python - Selenium - Python,找不到元素