chr*_*ris 2 c# performance watin
我正在和Watin一起写一个应用程序.它很棒,但是对我的程序进行了性能分析,超过50%的执行时间用于循环遍历元素列表.
例如:foreach(在browser.TextFields中的TextField bT){
很慢.
我似乎记得在某个地方看到有更快的方式在WatiN中这样做,但不幸的是我再也找不到页面了.
访问元素的数量似乎也很慢,例如; browser.CheckBoxes.Count
谢谢你的任何提示,克里斯
小智 6
我想如果我能更好地了解你想要做什么,我可以更好地回答你,但我可以分享一些关于我到目前为止用WatiN学到的东西的观察结果.
选择器越具体,事情就越快.避免使用"browser.Elements",因为它非常通用.我不确定它是否节省了多少,但是像浏览器那样做.Body.Elements会将标题元素排除在要检查的范围之外,并且可能会节省一些计算.
当我说"范围"时,请考虑WatiN始终以整个DOM开头.您能想到将元素范围限制在页面主div内的文本字段的方法吗?WatiN返回Elements和ElementCollections,每个元素和ElementCollections可以有自己的ElementCollection.该div可能有一个特定的ID,所以你可以做类似的事情
var textFields = ie.Div("divId").TextFields;
Run Code Online (Sandbox Code Playgroud)
寻找更具体的机会,您可以使用LINQ更清楚地描述您想要的内容.例如,你能写下这样的东西:
ie.Body.TextFields.
Where(tf => !string.IsNullOrWhiteSpace(tf.ClassName) && tf.ClassName.Contains("classname")).ToList().
Foreach(tf => tf.Value = "Your Text");
Run Code Online (Sandbox Code Playgroud)
我会通过以下方式减少扫描集合的次数来进一步改进:
ie.Body.TextFields.ToList().
Foreach(tf => {
if(!string.IsNullOrWhiteSpace(tf.ClassName) && tf.ClassName.Contains("classname")) {
tf => tf.Value = "Your Text"
}
});
Run Code Online (Sandbox Code Playgroud)
"Find.By*"说明符还可以帮助WatiN更快地对你想要的集合进行操作,并且对于我上面写的内容更加优雅:
ie.Body.TextFields.Filter(Find.ByClass("class")).ToList().ForEach(tf => tf.Value = "Your Text");
Run Code Online (Sandbox Code Playgroud)
作为最后一条建议,该项目允许您使用jQuery/CSS样式选择器查找元素.
所以,tl; dr:缩小你所寻找的范围,并具体说明.
希望有所帮助.我正在寻找加速自己测试的方法.
| 归档时间: |
|
| 查看次数: |
2852 次 |
| 最近记录: |