【发布时间】:2016-11-03 18:42:37
【问题描述】:
我有一个 IWebElement(一个 div),其中一半时间包含一个子元素。我想看看它是否包含子元素,如果是,我想捕获它。我做这样的事情:
IWebElement firstChild;
try
{
firstChild = divElement.FindElement(By.XPath("*"));
}
catch (NoSuchElementException e)
{
// catch and handling...
}
但这在三个部分上很慢:
1. By.XPath("*")的使用
2. FindElement 在元素不存在的情况下变慢
3. try/catch 是一个较慢的机制,我宁愿想要一个返回的布尔值对一个项目的存在
如何加快这种检测子元素的方式?
编辑:
澄清一下:我正在执行的测试在带有 div 的网格上运行,典型的网格是 4 x 16,所以 64 个字段。我想将此网格转换为 DataTable 以将其与预期结果进行比较。将这些字段捕获到数据表总共需要 22 秒。它的表现不是很糟糕,但我想把那些宝贵的时间剃掉。
更新:
我设法通过使用HTML Agility Pack 捕获网格来做到这一点。不幸的是(总有一些东西),input 元素的值无法被捕获,因为它们是动态设置的。作为一种解决方案,我会让 HAP 返回输入元素的 Id,并使用 FindElement(By.Id(inputId)) 捕获值,这与其他 Selenium 选择方法相比速度非常快。
长话短说:我设法将捕获时间从大约 22 秒减少到不到 3 秒,性能提高了 600% 以上。
【问题讨论】:
标签: c# selenium selenium-webdriver