我不知道控制有一种方法要通过搜索属性来完成,但还有其他方法。
其中一种方法是蛮力差异收集。找到所有的列表项目,然后找到隐藏的项目并做出改变。
HtmlControl listControl = /* find the UL somehow */
HtmlControl listItemsSearch = new HtmlControl(listControl);
listItemsSearch.SearchProperties.Add(HtmlControl.PropertyNames.TagName, "li");
HtmlControl hiddenListItemsSearch = new HtmlControl(listControl);
hiddenListItemsSearch.SearchProperties.Add(HtmlControl.PropertyNames.TagName, "li");
hiddenListItemsSearch.SearchProperties.Add(HtmlControl.PropertyNames.ClassName, "hidden");
var listItems = listItemsSearch.FindMatchingControls().Except(hiddenListItemsSearch.FindMatchingControls());
您只能一次迭代该集合,所以如果您需要迭代多次,请创建一个返回此搜索的函数。
var listItemsFunc =() => listItemsSearch.FindMatchingControls().Except(hiddenListItemsSearch.FindMatchingControls());
foreach(var listItem in listItemsFunc()){
// iterate 1
}
foreach(var listItem in listItemsFunc()){
// iterate 2
}
我会考虑这样做的另一种方式是过滤器的基础上有一个可点击的点和占用空间的屏幕(即不隐藏)上的控件。
listItemsSearch.FindMatchingControls().Where(x => {
try { x.GetClickablePoint(); return x.Width > 0 && x.Height > 0; } catch { return false; }
});
感谢您的回答。但是我希望没有classname的控件是“隐藏的”。 – Maltesh
好吧,那么你必须添加一些动态ID,或者你需要在运行时在下拉列表中添加一些属性,这样你就可以确定控制...而没有他们无法捕捉到。 – stylishCoder