我正在编写一段代码,其中在if条件下,我给出的条件是,如果显示元素,他们只会转到 if 部分,否则如果元素没有显示那么它应该转到其他部分。但是无论何时它进入if条件,它都会搜索元素,当它没有找到它时,它会给出一个超时异常。可以做些什么?
if(webDriver.findElementByXPath(btn).isDisplayed()){
//conditions
}
else{
//conditions
}
答案 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;
}