使用 html agility xpath 查找 webdriver 元素
Posted
技术标签:
【中文标题】使用 html agility xpath 查找 webdriver 元素【英文标题】:Using htmlagility xpath's to find webdriver elements 【发布时间】:2011-04-14 11:57:38 【问题描述】:我正在使用 htmlagility 包通过表格在大循环中定位元素,因为它比使用通过 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 id="testtable">
<tr>
<td>TEST</td>
</tr>
</table>
</MPNS:PageView>
</MPNS:MultiPage>
</body>
</HTML>
【问题讨论】:
您需要提供一个 XML (HTML) 的小示例,在该示例中您会遇到此异常。没有它,我们只能猜测错误的原因。 嗯似乎将所有内容更改为双斜杠有帮助,也许问题出在 mpns 命名空间 我认为您可以以更标准的兼容模式重构您的页面,将MPNS
前缀声明为 xmlns:MPNS="SOME_URI"
并使用 CSS 规则 MPNS\:MultiPage, MPNS\:MultiPage -ms-behavior: url(/webctrl_client/1_0/multipage.htc)
。 IE 有一些特殊的 SGML“命名空间”处理...
【参考方案1】:
似乎 Xpath 无法引用 mpns
命名空间,您需要在 XPath 查询中定义它。详情请见this
【讨论】:
以上是关于使用 html agility xpath 查找 webdriver 元素的主要内容,如果未能解决你的问题,请参考以下文章
HTML Agility Pack - 使用 Align=left 样式从 DIV 获取文本
如何使用 Xpath、css 或 Selenium 中的任何其他定位器在 html 中的结束标记后查找带有“== $0”的元素