我正在尝试创建一个if语句,以便在多种情况下使用我的代码。
当我尝试断言显示或启用时,我会在某些情况下遇到异常Iwebelement。
我想声明如果元素存在'x'应该发生,当元素不存在时'y'应该发生。
如上所述,我尝试过显示,已启用。我也尝试了asserFalse,但这也没有给我所需的结果。
它被要求提供代码,但我只需要一个if语句,如果元素存在则允许其他内容,否则应该跳过它。当我做的时候
if (element.Displayed)
{
}
但在某些情况下,我得到一个例外,我不想要例外
答案 0 :(得分:0)
是在TestNG或JUnit测试中吗?
我通常会在if语句中的正常情况下处理这个问题:
伪代码:
if(exists(x)){
assertTrue(....);
}
else{
assertFalse(....);
}
答案 1 :(得分:0)
搜索多个元素,即使存在多个元素(> 0),也返回true,否则,不存在具有特定By
的元素。
bool ElementExists()
{
return driver.FindElements(By.Id("your locator")).Count > 0;
}
然后就这样做
bool ElementExists(By locator)
{
TimeSpan originalWait = driver.Manage().Timeouts().ImplicitWait;
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(0);
bool exists = driver.FindElements(locator).Count > 0;
driver.Manage().Timeouts().ImplicitWait = originalWait;
return exists;
}
if(ElementExists(By.Id("your locator")))
{
//Do Stuff
}
else
{
//Do Stuff when element does not exist
}
编辑:同时将你的隐式等待时间减少到0秒,这样你就不会等待你的bool返回(只要你告诉,webdriver会等待元素出现)。
答案 2 :(得分:0)
您的方法仅在元素显示或存在时才起作用,否则它将抛出异常并且您没有处理它,因此脚本失败了。
您可以通过处理异常来创建类似下面的方法(我已在java中编写,请进行必要的更改)。
public static Boolean isElementDisplayed(WebDriver driver, By element) {
try {
driver.findElement(element).isDisplayed();
System.out.println("Element is displayed");
return true;
} catch (NoSuchElementException | ElementNotVisibleException e) {
System.out.println("Element not displayed");
return false;
}
}
您可以在测试用例中使用上述方法' n'像这样的次数。
if(isElementDisplayed(driver, By.xpath("locator")){
//do what you have to do if element is exists
}else{
//do what you have to do if element is not exists
}
希望这能解决您的问题