2012-12-27 68 views
1

我只需要點擊由唯一類標識的元素的第一個子元素。GeckoFX:將GeckoNode投射到GeckoHTMLElement

到目前爲止我的代碼是:

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

問題是GeckoFX 16的geckoWebBrowser.Document.GetElementsByClassName返回類型GeckoNode,這可是沒有Click方法的Array,所以這段代碼難道不工作。另一方面,方法
geckoWebBrowser.Document.GetElementsByName
返回類型GeckoHTMLElement的數組,其確實有Click方法。

基於這個事實,我嘗試使用as運算符進行投射,但是這總是會拋出一個Exception,並顯示它不能被投射。
我在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); 
} 
+0

您可能需要考慮添加一些文字來描述您的解決方案。例如*只檢查節點類型,看看節點類型是否是* –

+0

你的代碼總是說它不是一個geckoelement,但我已經通過執行javascript,通過querySelectorAll選擇元素,給它一個唯一的類名,然後單擊geckofx – Tearsdontfalls

+0

那麼爲什麼類型是這樣說的? – Tom

0

GeckoElement不支持Click,但是GeckoHtmlElement。

geckoWebBrowser.Document.GetElementsBy ...不返回GeckoHtmlElement,只有GeckoElement(s);好難過!

+0

GetHtmlElementById的存在以及GetElementById – Tom

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"); 
}