如果您有權訪問更改HTML,請嘗試在表格數據元素中放入類聲明。然後你可以使用By.ClassName而不是XPath。
但是在我進一步探討之前,你究竟想要做什麼?看起來很奇怪,
一旦CssSelectors完全支持.Net和IE,它將是一個不錯的選擇,但現在它不可靠。現在請記住,您的文檔需要在標準模式下呈現。
你會想考慮只看td,而不是td和th。雖然它確實可行,但它增加了一定的複雜性。爲了簡單起見,我已經在下面做了。通常你會知道有多少,他們持有什麼,並分別處理它們。
進入代碼我發現有一個輕微的加速去By.TagName。這花了大約20秒43行4列。
IWebElement table = driver.FindElement(By.TagName("table"));
ReadOnlyCollection<IWebElement> cells = table.FindElements(By.TagName("td"));
foreach (IWebElement cell in cells)
{
Console.WriteLine(cell.Text);
}
但後來我嘗試使用HtmlAgilityPack加載頁面的源代碼到內存和解析的頁面。要小心使用XML解析器來閱讀HTML文檔,你會發現HTML可能不是完美的XML。下面的代碼了,幾乎淫穢96 毫秒
HtmlDocument html = new HtmlDocument();
html.LoadHtml(driver.PageSource);
HtmlNodeCollection nodeCollect = html.DocumentNode.SelectNodes("//td");
foreach (HtmlNode node in nodeCollect)
{
Console.WriteLine(node.InnerText);
}
去與加載頁面的源代碼和解析,如果你想這樣做,通過文檔檢查元素進行迭代。當您需要導航/互動時,還原到您的驅動程序。
@Mikey:你爲什麼不只一次導入樹?說'/ html/body/table/tr/*'或'/ html/body/table/tr/* [self :: td或self :: th]' – 2010-09-14 15:44:31