使DOM元素在没有id属性的情况下可见



使用cssSelector,我能够找到一些具有id属性的元素。例如:

li[id='header-mypage-top']>a

使用Selenium 2(WebDriver)中的isDisplayed(),它被发现为true。

我的问题是点击下面的一些链接,我可以使用xpath找到这些链接,但使用isDisplayed()发现这些链接为false。

<li class="logout" data-action-url="www.xxx.co.jp/yyy">
    <a href="javascript:void(0)">ログアウト</a>
</li>

我试图使用以下代码找到:

List<WebElement> elements =     driver.findElements(By.xpath("//li[@class='logout']/a"));
System.out.println("Logout item size: "+elements.size());

大小显示为1,但isDisplayed()返回false。

如何使此元素可见并能够单击它?

我使用的是PhantomJS 2.1.1。Firefox不会出现上述问题。

我猜元素(在本例中为"logout")没有在特定时间正确加载。所以你可以使用显式等待如下:

WebDriverWait wait = new WebDriverWait(driver, 15);
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//li[@class='logout']/a")));
        boolean isLogoutDisplayed = driver.findElement(By.xpath("//li[@class='logout']/a")).isDisplayed();
        System.out.println("Is Logout displayed: " + isLogoutDisplayed);

这是我找到的解决方案:

    wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//li[@class='logout']/a")));
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//li[@class='logout']/a")));

使用以上两个等待来解决我的问题。

最新更新