2010-09-20 55 views
2

我使用htmlagility包通過表中查找大的環路元素,因爲它比使用webdriver的通過所提供的本地方法更快。使用htmlagility XPath的找到webdriver的元素

通過我得到它的XPath的循環定位特定元素後,再餵養到的webdriver返回的元素。

但是我發現了一個例外;

OpenQA.Selenium.NoSuchElementException:FindElementByXPath。

//html[1]//body[1]//mpns:multipage[1]//mpns:pageview[1]//table[1]// 

[Test] 
[Browser(BrowserType.IE)] 
public void Simple_HtmlAgility_Xpath() 
{ 
    Browser.GoTo("http://test/"); 
    Browser.Login().Login_Admin(); 

    using (Browser.SwitchToFrame("main")) 
    { 
     var html = new HtmlAgilityPack.HtmlDocument(); 
     html.LoadHtml(Browser.PageSource); 
     var node = html.DocumentNode.SelectSingleNode("//table[@id='testtable']"); 
     var xpath = node.XPath.Replace("/", "//"); 
     Log.Debug(xpath); 
     var element = Browser.FindElement(By.XPath(xpath)); 
     Log.Debug(element.Text); 
    } 
} 

的頁面的示例;

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<HTML> 
    <HEAD> 
     <title>Welcome</title>   
    </HEAD> 
    <body> 
     <?XML:NAMESPACE PREFIX="MPNS" /><?IMPORT NAMESPACE="MPNS" IMPLEMENTATION="/webctrl_client/1_0/multipage.htc" /> 
     <MPNS:MultiPage id="test1"> 
     <MPNS:PageView>   
     <table width="100%" id="testtable"> 
      <tr> 
       <td>TEST</td> 
      </tr> 
     </table>        
     </MPNS:PageView> 
     </MPNS:MultiPage> 
    </body> 
</HTML> 
+0

您需要提供您得到這個異常的XML(HTML)的一個小例子。沒有它,人們只能猜測錯誤的原因。 – 2010-09-20 12:56:48

+0

嗯,似乎一切都變更爲雙斜線幫助,也許問題與MPNS命名空間 – Thermionix 2010-09-21 05:11:34

+0

我想你可以在一個更STANDAR兼容模式聲明'MPNS'前綴'的xmlns重構你的頁面:MPNS =「SOME_URI」'和尤斯CSS規則' MPNS \:MultiPage,MPNS \:MultiPage {-ms-behavior:url(/webctrl_client/1_0/multipage.htc)}'。 IE有一些特殊的SGML「命名空間」處理... – 2010-09-21 14:20:03

回答

0

似乎Xpath不能引用mpns命名空間,您需要在XPath查詢中定義它。請參閱this一些細節