在C#中,你可以像這樣創建的webdriver擴展方法:
public static IList<IWebElement> FindDisplayedElements<T>(this T searchContext, By locator) where T : ISearchContext {
IList<IWebElement> elements = searchContext.FindElements(locator);
return elements.Where(e => e.Displayed).ToList();
}
// Usage: driver.FindDisplayedElements(By.xpath("//li[@role='option']"));
或者使用Linq當你調用FindElements
:
IList<IWebElement> allOptions = driver.FindElements(By.xpath("//li[@role='option']")).Where(e => e.Displayed).ToList();
不過,我是知道的擴展方法和LINQ唐在Java中不存在。所以你可能需要用同樣的邏輯創建你自己的靜態方法/類。
// pseudo Java code with the same logic
public static List<WebElement> findDisplayedElements(WebDriver driver, By locator) {
List <WebElement> elementOptions = driver.findElements(locator);
List <WebElement> displayedOptions = new List<WebElement>();
for (WebElement option : elementOptions) {
if (option.isDisplayed()) {
displayedOptions.add(option);
}
}
return displayedOptions;
}
能告訴我爲什麼你不想使用'isDisplayed'? – vidit 2013-05-07 03:32:23
它不是我不想使用isDisplayed,但如何使用isDisplayed與findElements?在findElement中,我們可以使用它作爲driver.findElement.isDisplayed,但在findElements中,我沒有看到這個方法。請幫忙 – user2356679 2013-05-07 22:21:52
感謝您的想法。 – user2356679 2013-05-10 00:37:12