【发布时间】:2013-01-08 11:13:46
【问题描述】:
我正在使用 Selenium Webdriver 来迭代表的行并为每一行创建一个类 T 的实例,根据行中的数据设置对象的属性:
public override void RefreshElements()
{
base.RefreshElements();
var browseTableRows = Driver.FindElements(By.CssSelector("table.browse>tbody>tr"));
ItemsList = new List<T>(browseTableRows.Count);
ItemsById = new Dictionary<int, T>(browseTableRows.Count);
foreach (var tr in browseTableRows) {
T item = new T() {
ID = int.Parse(tr.FindElement(By.XPath("td[2]")).Text),
Name = tr.FindElement(By.XPath("td[3]")).Text,
Description = tr.FindElement(By.XPath("td[4]")).Text
};
ItemsList.Add(item);
ItemsById.Add(item.ID, item);
}
}
这段代码很慢。关于如何加快此代码的任何建议?
为了清楚起见,T 类没有做任何复杂的事情:
public class T
{
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
如果有用的话,我使用的是 Selenium 2.29.1 版本,.NET 4.0,并且我正在运行 Internet Explorer 驱动程序。
【问题讨论】:
-
每一行都需要一个类实例的原因是什么?另外,有多慢?哪个 bit 慢?实际的
.FindElements电话?遍历元素? -
我相当确定缓慢是由于
FindElements方法,或者传递给该方法的选择或参数。我已经添加了类 T 的内容,以便清楚。我正在测试的表有 34 行,处理时间为 52 秒。 -
换一个驱动会有影响吗?
-
是的,FirefoxDriver 更快。
-
By.Xpath在 IE 上非常慢。我们进行了讨论here
标签: c# webdriver selenium-webdriver