断言元素不存在

时间:2018-02-09 14:32:49

标签: c# selenium

我正在尝试创建一个if语句,以便在多种情况下使用我的代码。

当我尝试断言显示或启用时,我会在某些情况下遇到异常Iwebelement。

我想声明如果元素存在'x'应该发生,当元素不存在时'y'应该发生。

如上所述,我尝试过显示,已启用。我也尝试了asserFalse,但这也没有给我所需的结果。

它被要求提供代码,但我只需要一个if语句,如果元素存在则允许其他内容,否则应该跳过它。当我做的时候

if (element.Displayed)
{
}

但在某些情况下,我得到一个例外,我不想要例外

3 个答案:

答案 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
        }

希望这能解决您的问题