Я использую 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>
Вам нужно предоставить небольшой пример XML (HTML), на котором вы получаете это исключение. Без него можно только догадываться о причине ошибки. –
Хм кажется, что все меняется на двойные слэши, может быть проблема с mpns namespace – Thermionix
Я думаю, что вы могли бы реорганизовать свою страницу в более стандартном режиме совместимости, объявив префикс '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