gpt4 book ai didi

performance - 提高 Watin 的性能和速度

转载 作者:行者123 更新时间:2023-12-01 13:08:23 24 4
gpt4 key购买 nike

我们正在使用 Watin 进行验收测试,我们发现一旦我们的网页超过 100K 的 HTML 源代码,它就会变得非常慢。

我感觉某些速度问题来自迭代 HTML 表格。我们的一些表格有 50 - 60 行,每行有 5 - 10 列,这使得 Watin 在页面上搜索项目时非常慢。

是否有人对(例如)要使用的元素搜索方法的最佳重载有具体建议?是否有特定的方法可以避免,因为它们真的很慢?

最佳答案

我为帮助加快处理表元素所做的工作是编写一个扩展方法,通过在表行上调用 NextSibling 而不是调用可能很慢的 .TableRows 属性来迭代表行。

public static class IElementContainerExtensions
{
/// <summary>
/// Safely enumerates over the TableRow elements contained inside an elements container.
/// </summary>
/// <param name="container">The IElementsContainer to enumerate</param>
/// <remarks>
/// This is neccesary because calling an ElementsContainer TableRows property can be an
/// expensive operation. I'm assuming because it's going out and creating all of the
/// table rows right when the property is accessed. Using the itterator pattern below
/// to prevent creating the whole table row hierarchy up front.
/// </remarks>
public static IEnumerable<TableRow> TableRowEnumerator( this IElementContainer container )
{
//Searches for the first table row child with out calling the TableRows property
// This appears to be a lot faster plus it eliminates any tables that may appear
// nested inside of the parent table

var tr = container.TableRow( Find.ByIndex( 0 ) );
while ( true )
{
if ( tr.Exists )
{
yield return tr;
}
//Moves to the next row with out searching any nested tables.
tr = tr.NextSibling as TableRow;
if ( tr == null || !tr.Exists )
{
break;
}
}
}
}

您需要做的就是获得对表的引用,它会找到第一个 tr 并遍历它的所有兄弟。

foreach ( TableRow tr in ie.Table( "myTable" ).TableRowEnumerator() )
{
//Do Someting with tr
}

关于performance - 提高 Watin 的性能和速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1125862/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com