如果执行else if(xpathcondition),如果第一个xpathcondition失败?

时间:2015-04-09 04:09:26

标签: java selenium xpath selenium-webdriver

if(driver.findElement(By.xpath("//div/h3[contains(text(),'MOVENPICK HOTEL DEIRA')]")).isDisplayed())
{
}
else if(driver.findElement(By.xpath("//div/h3[contains(text(),'HOTEL INN')]")).isDisplayed())
{
}

在上面的代码中,如果条件失败意味着如何执行else if(xpathcondition), 对于失败的条件,它将异常显示为“未找到元素”。如果我处理异常,如果执行其他如何? 谢谢你的帮助!!

2 个答案:

答案 0 :(得分:1)

理想情况下isDisplayed()应该返回false而不是抛出异常。

你可以用saifur回答。另一种方法是(根据this

try {

 if(driver.findElement(By.xpath("//div/h3[contains(text(),'MOVENPICK HOTEL DEIRA')]")).isDisplayed())
    {  }

}catch(){  //catch executes the else part when the exception is thrown.

    if(driver.findElement(By.xpath("//div/h3[contains(text(),'HOTEL INN')]")).isDisplayed())
    {    }

}

同时检查此issue

答案 1 :(得分:0)

这里的问题是,如果任何元素查找失败,测试将终止 NoSuchElement Element not Found 异常,因为元素不是dom的一部分。为避免这种情况,您可以稍微欺骗代码或进行另一次检查以查看元素是否首先存在。

我宁愿找到元素并匹配文本而执行其他任务

// Write a selector that would meet the find both elements
WebElement element = driver.findElement(By.cssSelector("div h3"));

if (element.getText().contains("MOVENPICK HOTEL DEIRA")) {
    //do this
} else if (element.getText().contains("HOTEL INN")) {
    //do something
} else {
    //do nothing and log some error
}