GeckoFX: приведение GeckoNode к GeckoHTMLElement

Мне просто нужно сделать щелчок по первому дочернему элементу, идентифицированному уникальным классом.

Мой код до сих пор:

geckoWebBrowser.Document.GetElementsByClassName("button")[0].FirstChild.Click();

Проблема в том, что GeckoFX 16 geckoWebBrowser.Document.GetElementsByClassName возвращает массив типа GeckoNode, который не имеет метода Click, поэтому этот код не будет работать. С другой стороны, метод
geckoWebBrowser.Document.GetElementsByName
возвращает массив типа GeckoHTMLElement, который имеет метод щелчка.

Основываясь на этом факте, я попытался as Оператор, но это всегда выдает исключение с сообщением, что оно не может быть приведено.
Я уже много искал в классах GeckoFX (к сожалению, нет никакой документации), но я ничего не нашел

Любая помощь будет оценена.

3 ответа

Решение

Перед приведением необходимо убедиться, что узел на самом деле является элементом, а не, например, текстовым узлом.

GeckoNode node = geckoWebBrowser.Document.GetElementsByClassName("button")[0].FirstChild;
if (NodeType.Element == node.NodeType)
{
  GeckoElement element = (GeckoElement)node;
  element.Click();
}
else
{
 // Even though GetElementByClassName return type could contain non elements, I don't think
 // it ever would in reality.
 Console.WriteLine("First node is a {0} not an element.", node.NodeType);
}

Знаете ли вы, HTML уже загружен?

Попробуйте запустить этот код после наступления события DocumentCompleted.

geckoWebBrowser1.DocumentCompleted += geckoWebBrowser1_DocumentCompleted;

private void geckoWebBrowser1_DocumentCompleted(object sender, EventArgs e)
{
   // Here you can add the coding to perform after document loaded
   GeckoInputElement txtbox = (GeckoInputElement)geckoWebBrowser1.Document.GetElementById("txtBox1");
   txtbox.SetAttribute("value","OK");
}

GeckoElement не поддерживает Click, но GeckoHtmlElement.

geckoWebBrowser.Document.GetElementsBy... не возвращает GeckoHtmlElement, только GeckoElement(s); Очень грустно!

Другие вопросы по тегам