2

我只需要单击由唯一类标识的元素的第一个子项。

到目前为止,我的代码是:

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

问题是 GeckoFX 16 的geckoWebBrowser.Document.GetElementsByClassName返回一个类型的数组GeckoNode,它没有 Click 方法,所以这个代码不起作用。另一方面,该方法
geckoWebBrowser.Document.GetElementsByName
返回一个 Type 的数组GeckoHTMLElement,它确实有一个 Click 方法。

基于这一事实,我尝试使用asOperator 进行强制转换,但这总是会引发异常,并显示无法强制转换的消息。
我已经在 GeckoFX 的类中搜索了很多(遗憾的是没有任何文档),但我没有找到

任何帮助将不胜感激。

4

3 回答 3

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);
}
于 2013-01-04T21:57:36.767 回答
1

你知道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");
}
于 2016-11-27T19:12:20.180 回答
0

GeckoElement 不支持 Click,但 GeckoHtmlElement。

geckoWebBrowser.Document.GetElementsBy... 不返回 GeckoHtmlElement,仅返回 GeckoElement(s);好难过!

于 2013-09-10T04:03:39.057 回答