可以isDisplayed()返回false而不会破坏Selenium中的运行吗?

时间:2017-04-04 09:31:54

标签: java selenium selenium-webdriver

我想使用.isDisplayed()方法使用条件函数。只要此方法返回true,一切都正常。

我认为不需要HTML,因为我只有一个按钮可以在页面上看到,这是相关的(我已成功点击了带有以下xpath的按钮。

现在我尝试:

if (driver.findElement(By.xpath("//a[@id='button1']")).isDisplayed()) {
     //do stuff
}
else {
    //do other stuff
}

甚至

WebElement withdrawnBtn = driver.findElement(By.xpath("//a[@id='button1']"));
boolean isVisible = withdrawnBtn.isDisplayed();
if (isVisible) {
     //do stuff
}
else {
    //do other stuff
}

但是两个条件都失败了,如果在第一次运行中应该执行来自else的代码,因为每当按钮不可用时,就会有失败指向driver.findElement(By.xpath("//a[@id='button1']")).isDisplayed());的行 - 失败,因为没有显示按钮。当没有显示按钮而不是代码失败时我需要做某事......

4 个答案:

答案 0 :(得分:1)

在检查isDisplayed条件之前,我们需要检查页面上是否存在元素否则会抛出Nosuchelementfound异常

driver.findElements(“Locator”)。size() - 如果页面上存在元素,则返回整数值。

以下是修正代码。

  int size = driver.findElements("Locator").size();
    if(size!=0){
         if(driver.findElement("Locator").isDisplayed()){
             // do operations
         }
    }

阅读评论后,我知道isEmpty是更好的使用方式而不是大小我对上面的代码进行了更改。

WebDriver driver;
List<WebElement> webElements = driver.findElements(By.xpath("test"));
if(!webElements.isEmpty()){
    if(driver.findElement(By.xpath("test")).isDisplayed()){
        // do operations
    }
 }

尝试一下,让我知道它是否适合你

答案 1 :(得分:1)

您还可以使用以下内容来识别元素是否存在:

private boolean isPresent(WebElement element) {
try {
    element;
} catch (NoSuchElementException e) {
    return false;
}
return true;
}

答案 2 :(得分:0)

好的,我正在考虑捕获NoElementFound异常,但我发现了这个问题: Selenium Webdriver: best practice to handle a NoSuchElementException

使用我上面使用的链接:

List<WebElement> withdrawnBtn = driver.findElements(By.xpath("//a[@id='button1']"));
if (withdrawnBtn.size() != 0) {
     //do stuff
}
else {
    //do other stuff
}

答案 3 :(得分:0)

您可以使用isEmpty()方法代替size()方法。