如果您有权访问更改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