首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium 2.0 IE Xpath性能

Selenium 2.0 IE Xpath性能
EN

Stack Overflow用户
提问于 2010-09-14 10:01:10
回答 2查看 2K关注 0票数 2

我正在尝试使用selenium-dotnet-2.0a5来迭代许多表,并且必须使用xpath。例如:

代码语言:javascript
复制
var tableRows = _table.FindElements(By.TagName("tr"));

foreach (var row in tableRows)
{ 
    row.FindElements(By.XPath("td|th"));
    //iterate through tablecells and get text of each
}

迭代大约50行的平均时间,firefox 0-2秒,chrome 6-8秒,IE 60-70秒。

我的大多数测试都需要在IE中运行,有什么建议可以让我获得更好的xpath性能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-15 06:31:14

如果您有权更改HTML,请尝试在表数据元素上放置一个类声明。然后您可以使用By.ClassName而不是XPath。

但在我进一步讨论之前,您到底想要做什么?看起来很奇怪

一旦.Net和IE完全支持CssSelectors,这将是一个很好的选择,但目前它还不可靠。请记住,现在,您的文档需要在标准模式下呈现。

你可以考虑只看td,而不是td和th。虽然它肯定是可行的,但它增加了一定的复杂性。为了简单起见,我在下面这样做了。通常,您会知道有多少个th以及它们持有什么,然后分别处理它们。

开始编写代码时,我发现By.TagName的速度略有提高。这在43行乘4列上花费了大约20秒。

代码语言:javascript
复制
        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毫秒

代码语言:javascript
复制
        HtmlDocument html = new HtmlDocument();
        html.LoadHtml(driver.PageSource);
        HtmlNodeCollection nodeCollect =  html.DocumentNode.SelectNodes("//td");
        foreach (HtmlNode node in nodeCollect)
        {
            Console.WriteLine(node.InnerText);
        }

接着加载页面源代码和解析,如果你想做的就是遍历文档检查元素。当您需要导航/交互时,恢复到您的驱动程序。

票数 1
EN

Stack Overflow用户

发布于 2010-09-14 15:17:25

我一直在selenium 1上遇到同样的问题,我通过更新第三方xpath库来改进它,不确定这是否仍然适用于selenium 2……但归根结底,如果它不是浏览器原生的,它就不够快。

最后,如果像您的示例和CSS选择器这样的东西不能解决问题,我只需要返回selenium中的整个DOM,并使用另一个库在代码中解析树,然后以这种方式遍历它。有点肮脏的技巧,但确实绕过了你使用缓慢的IE xpath。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3705659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档