Не удается преобразовать HTMLInputElementClass в HTMLButtonElementClass с помощью автоматизации IE?

Привет, я пытаюсь нажать кнопку с помощью С#, но я продолжаю получать ошибку приведения

Unable to cast COM object of type 'mshtml.HTMLInputElementClass' to class type 'mshtml.HTMLButtonElementClass'. Экземпляры типов, представляющих COM-компоненты, не могут быть приведены к другим типам, представляющим COM-компоненты; однако их можно приводить к интерфейсам, если базовый компонент COM поддерживает вызовы QueryInterface для 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 = "[email protected]";
            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();
        }
    }
}

person Evan    schedule 06.04.2012    source источник


Ответы (1)


Элемент <button> не <input type="submit"> или <input type="button">.

<input> DOM-элемент обозначается mshtml.HTMLInputElementClass, а <button> DOM-элементmshtml.HTMLButtonElementClass. Таким образом, приведение недействительно, так как ButtonElement нельзя назначать (приводить) из InputElement, а разные типы представляют два разных объекта HTML. Выявляется «буквальная» интерпретация DOM.

Приведение типов не (и не может) изменить фактический тип объекта. Решение состоит в том, чтобы относиться к объекту так, как он есть: mshtml.HTMLInputElement.

(Хорошо, что HTMLInputElement также имеет click.)

Удачного кодирования.

person Community    schedule 06.04.2012
comment
Большое спасибо, как же я был слеп, я был уверен, что это была кнопка. - person Evan; 06.04.2012