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>
您需要提供您得到這個異常的XML(HTML)的一個小例子。沒有它,人們只能猜測錯誤的原因。 – 2010-09-20 12:56:48
嗯,似乎一切都變更爲雙斜線幫助,也許問題與MPNS命名空間 – Thermionix 2010-09-21 05:11:34
我想你可以在一個更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