1

こんにちは私はc#を使用してボタンをクリックしようとしていますが、キャストエラーが発生し続けます

Unable to cast COM object of type 'mshtml.HTMLInputElementClass' to class type 'mshtml.HTMLButtonElementClass'。COMコンポーネントを表す型のインスタンスは、COMコンポーネントを表す異なる型にキャストすることはできません。ただし、基盤となるCOMコンポーネントがインターフェイスのIIDに対するQueryInterface呼び出しをサポートしている限り、インターフェイスにキャストできます。

私は何が間違っているのですか?コードは次のとおりです。

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();
        }
    }
}
4

1 に答える 1

1

A<button>はまたはではありません<input type="submit"><input type="button">

<input> DOM要素はで表されmshtml.HTMLInputElementClass、DOM<button> 要素はで表されmshtml.HTMLButtonElementClassます。したがって、ButtonElementはInputElementから割り当て可能(キャスト可能)ではなく、異なるタイプは2つの異なるHTMLエンティティを表すため、キャストは無効です。DOMの「文字通りの」解釈が公開されています。

キャストは実際のオブジェクトのタイプを変更しません(そして変更できません)。解決策は、オブジェクトをそれが何であるかを処理することですmshtml.HTMLInputElement

( HTMLInputElementにも。が付いているclickのは良いことです。)

ハッピーコーディング。

于 2012-04-06T00:24:30.563 に答える