2010-09-20 4 views
2

Я использую htmlagility pack для поиска элементов в больших циклах через таблицы, потому что это намного быстрее, чем использование собственных методов, предоставляемых через 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), на котором вы получаете это исключение. Без него можно только догадываться о причине ошибки. –

+0

Хм кажется, что все меняется на двойные слэши, может быть проблема с mpns namespace – Thermionix

+0

Я думаю, что вы могли бы реорганизовать свою страницу в более стандартном режиме совместимости, объявив префикс 'MPNS' как' xmlns: MPNS = "SOME_URI" и ussing CSS rule ' 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 для некоторых деталей.