如果元素没有显示Selenium,如何转到else条件

时间:2018-01-11 05:47:54

标签: java selenium if-statement webdriver

我正在编写一段代码,其中在if条件下,我给出的条件是,如果显示元素,他们只会转到 if 部分,否则如果元素没有显示那么它应该转到其他部分。但是无论何时它进入if条件,它都会搜索元素,当它没有找到它时,它会给出一个超时异常。可以做些什么?

if(webDriver.findElementByXPath(btn).isDisplayed()){
//conditions
}
else{
//conditions
}

4 个答案:

答案 0 :(得分:1)

您可以捕获TimeoutException和其他异常,并为不显示条件执行相同的方法,并将异常子句捕获为:

try {
  if(webDriver.findElementByXPath(btn).isDisplayed()){
     //conditions
  }
  else{
     conditionsForNotDisplay();
  }
} catch (Exception e) {
  //log exception
  conditionsForNotDisplay();

}

答案 1 :(得分:0)

您必须看不到已展示的代码块中出现的 TimeoutException 。您需要稍微修改代码块以捕获 NoSuchElementException 异常,如下所示:

    try
    {
        WebElement my_element = webDriver.findElementByXPath(btn);
        if(element.isDisplayed()){
            //conditions
        }else{
            //conditions
        }
    }
    catch (NoSuchElementException e)
    {
        //conditions
    }

答案 2 :(得分:0)

如果你必须在每种情况下做一些特定的事情,或者在一个catch中捕获它们并在相应的处理中添加其他代码,你可以在不同的catch子句中分别在TimeoutException和NoSuchElementException的处理程序中添加你的else条件代码。

但是下面的方法有一个问题,如果从else条件抛出异常,那么条件代码将被执行两次。

maven-scm-provider-jgit

-

1.9.4

答案 3 :(得分:0)

您可以使用以下代码检查视图中是否存在元素。使用设置为false的布尔元素创建一个布尔函数。 如果显示该元素,则将web元素传递给boolean函数,将boolean元素的状态更改为true,否则将返回false **您可以使用Assert而不是sysout。

@Test
public void testLogin(){ 

  if(isElementPresent(errorLogin))
         {            
             System.out.println("Please enter valid email id and password");
         }
         else
         {
             System.out.println("Login successfull..........Enjoy");

         }
}
public boolean isElementPresent(WebElement ele)
     {
        boolean ElementPresent=false;
        try {
            if(ele.isDisplayed())
            {
                ElementPresent=true;
            }
        }
        catch(Exception e)
        {
            System.out.println("Element is not proeset " +e);
        }
        return ElementPresent;
     }