gpt4 book ai didi

c# - WatiN 中元素的缓慢迭代

转载 作者:行者123 更新时间:2023-12-03 19:16:09 25 4
gpt4 key购买 nike

我正在使用 Watin 编写一个应用程序。它很棒,但是对我的程序运行性能分析,超过 50% 的执行时间花在循环元素列表上。

例如: foreach(浏览器中的 TextField bT.TextFields) {

非常慢。

我似乎记得在 WatiN 中看到过有更快的方法,但不幸的是我无法再次找到该页面。

访问元素的数量似乎也很慢,例如; browser.CheckBoxes.Count

感谢您的任何提示,克里斯

最佳答案

如果我对您想要做什么有更好的了解,我想我可以更好地回答您,但我可以分享一些迄今为止我在 WatiN 中学到的观察结果。

您的选择器越具体,事情进展得越快。避免使用“browser.Elements”,因为它非常通用。我不确定它是否可以节省很多,但是执行 browser.Body.Elements 之类的操作会将 header 元素抛出到要检查的范围之外,并且可能会节省一些计算。

当我说“范围”时,请考虑 WatiN 始终从整个 DOM 开始。您能想出一些方法来将元素的范围限制在页面主 div 内的文本字段吗? WatiN 返回 Elements 和 ElementCollections,每个元素都可能有自己的 ElementCollection。该 div 可能有一个特定的 ID,因此您可以执行类似

的操作
var textFields = ie.Div("divId").TextFields;

寻找更具体的机会,您可以使用 LINQ 更清楚地描述您想要的内容。例如,你可以写这样的内容:

ie.Body.TextFields.
Where(tf => !string.IsNullOrWhiteSpace(tf.ClassName) && tf.ClassName.Contains("classname")).ToList().
Foreach(tf => tf.Value = "Your Text");

我会通过执行以下操作来减少扫描集合的次数,从而进一步完善这一点:

ie.Body.TextFields.ToList().
Foreach(tf => {
if(!string.IsNullOrWhiteSpace(tf.ClassName) && tf.ClassName.Contains("classname")) {
tf => tf.Value = "Your Text"
}
});

“Find.By*”说明符还可以帮助 WatiN 更快地操作您想要的集合,并且是我上面所写内容的更优雅的简写:

ie.Body.TextFields.Filter(Find.ByClass("class")).ToList().ForEach(tf => tf.Value = "Your Text");

作为最后一条建议,this project让您可以使用 jQuery/CSS 样式选择器查找元素。

所以,tl;dr:缩小您要寻找的内容的范围,并具体化。

希望有帮助。我正在寻找加快我自己的测试速度的方法。

关于c# - WatiN 中元素的缓慢迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5986318/

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