无法将 HTMLInputElementClass 转换为具有 IE 自动化功能的 HTMLButtonElementC
本文关键字:自动化 IE 功能 HTMLButtonElementC HTMLInputElementClass 转换 | 更新日期: 2023-09-27 18:30:25
嗨,我正在尝试使用 C# 单击一个按钮,但我不断收到转换错误
Unable to cast COM object of type 'mshtml.HTMLInputElementClass' to class type 'mshtml.HTMLButtonElementClass'
.表示 COM 组件的类型实例不能强制转换为表示 COM 组件的不同类型;但是,只要基础 COM 组件支持对接口的 IID 的查询接口调用,就可以将它们强制转换为接口。
我做错了什么?代码如下:
namespace IEAutomation {
/// <summary>
/// Summary description for IEDriverTest.
/// </summary>
///
using mshtml;
using System.Threading;
using SHDocVw;
public class IEDriverTest {
public IEDriverTest() {
}
public void TestGoogle() {
object o = null;
SHDocVw.InternetExplorer ie = new
SHDocVw.InternetExplorerClass();
IWebBrowserApp wb = (IWebBrowserApp)ie;
wb.Visible = true;
//Do anything else with the window here that you wish
wb.Navigate("https://adwords.google.co.uk/um/Logout", ref o, ref o, ref o, ref o);
while (wb.Busy) { Thread.Sleep(100); }
HTMLDocument document = ((HTMLDocument)wb.Document);
IHTMLElement element = document.getElementById("Email");
HTMLInputElementClass email = (HTMLInputElementClass)element;
email.value = "testtestingtton@gmail.com";
email = null;
element = document.getElementById("Passwd");
HTMLInputElementClass pass = (HTMLInputElementClass)element;
pass.value = "pass";
pass = null;
element = document.getElementById("signIn");
HTMLButtonElementClass subm = (HTMLButtonElementClass)element;//ERROR HERE
subm.click();
}
}
}
<button>
不是<input type="submit">
或<input type="button">
。
<input>
DOM 元素由 mshtml.HTMLInputElementClass
表示,而<button>
DOM 元素由 mshtml.HTMLButtonElementClass
表示。因此,强制转换是无效的,因为 ButtonElement 不可从 InputElement 分配(可转换),并且不同的类型表示两个不同的 HTML 实体。暴露了对 DOM 的"字面"解释。
强制转换不会(也不能)更改实际对象的类型。解决方案是处理对象的本质:mshtml.HTMLInputElement
。
(这是一件好事 HTMLInputElement 也有一个click
。
快乐编码。