我需要在网页上获取所有可见元素才能点击它们,但是用.displayed检查每个元素太长了吗?硒法。是否有另一种方法来创建仅包含可见元素的数组,以避免检查。
似乎我只需要来自萤火虫的非灰色元素。
//*[not(contains(@style,'display:none'))]
请求无法解决我的问题,因为并非所有不可见元素都具有此属性。
答案 0 :(得分:2)
如果您使用的是C#.NET,则可以使用lambda表达式删除任何未显示的元素。如果没有,那么这将不起作用。这将获得每个锚元素,输入元素和选择元素。然后它将删除任何未显示的内容。
browserDriver.Navigate().GoToUrl("http://www.yahoo.com/");
List<IWebElement> theseElements = browserDriver.FindElements(By.TagName("a")).ToList();
theseElements.AddRange(browserDriver.FindElements(By.TagName("input")).ToList());
theseElements.AddRange(browserDriver.FindElements(By.TagName("select")).ToList());
theseElements.RemoveAll(i => !i.Displayed); //LAMBDA EXPRESSION
foreach (IWebElement element in theseElements)
{
element.Click();
}
答案 1 :(得分:0)
我知道这不会被标记,但使用jQuery visible selector,就像:visible
一样简单。