Использование htmlagility xpath для поиска элементов веб-драйвера - PullRequest
2 голосов
/ 20 сентября 2010

Я использую пакет htmlagility для поиска элементов в больших циклах по таблицам, потому что это намного быстрее, чем использование нативных методов, предоставляемых через веб-драйвер.

После нахождения определенного элемента в цикле я получаю его xpath, а затем передаю его веб-драйверу для возврата элемента.

Однако я получаю исключение;

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>

1 Ответ

0 голосов
/ 20 сентября 2010

Кажется, что Xpath не может ссылаться на пространство имен mpns, и вам нужно определить его в своем запросе XPath. Пожалуйста, смотрите это для некоторых деталей

...