使 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")));
结合使用以上两个等待解决了我的问题。
使用 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")));
结合使用以上两个等待解决了我的问题。