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

Make DOM Element visible without id attribute

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

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

并使用 Selenium 2 (WebDriver) 中的 isDisplayed(),发现它是正确的。

我的问题是单击下面的某些链接,我可以使用 xpath 找到这些链接,但使用 isDisplayed() 发现它们是错误的。

<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() returns 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")));

结合使用以上两个等待解决了我的问题。