4

Eclipse、TestNG、および Selenium 2.32 を使用しています。

List <<f>WebElement> elementOption = driver.findElements(By.xpath("//li[@role='option']"));

このコードdriver.findElements(By.xpath("//li[@role='option']"));は、表示されていないすべての要素も返します。上記の「elementOption」には、Web ページに表示されない要素も含め、すべての要素が含まれるようになりました。Webページに表示されている要素のみを返すメソッドとIsDisplayed一緒に使用できます。表示されている要素のみを返すfindElementものに似たものはありIsDisplayedますか?findElements

4

2 に答える 2

2

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;
}
于 2013-05-07T03:44:12.953 に答える
1

取得しようとしている要素に表示値を持つ style などの属性が含まれている場合は、表示されている要素のみを取得するように XPATH を変更する必要がある場合があります。

List <WebElement> elementOption = driver.findElements(By.xpath("//li[@role='option'][contains(@style,'display: block;')]"));

また

List <WebElement> elementOption = driver.findElements(By.xpath("//li[@role='option'][not(contains(@style,'display: none'))]"));
于 2016-12-08T12:15:12.220 に答える