【问题标题】:Assert element not exist without exception断言元素不存在无一例外
【发布时间】:2018-02-09 23:46:44
【问题描述】:

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

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

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

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

它被要求提供代码,但我只需要一个 if 语句,如果元素存在则让某些东西为真,否则应该跳过它。当我这样做时

if (element.Displayed)
{
}

但在某些情况下,我得到一个异常,我不想要这个异常

【问题讨论】:

  • 添加一些代码来说明可能吗?
  • @JacobKrall 在那个网页上他们使用 IsElementPresent 我假设在 c# 中是 GetAttribute 因为我没有 IsElementPresent 的选项
  • IsElementPresent 是他们自己编写的函数。它的源代码在答案中。

标签: c# selenium


【解决方案1】:

这是在 TestNG 还是 JUnit 测试中?

我通常会在 if 语句中处理这种情况:

伪代码:

if(exists(x)){
     assertTrue(....);
}
else{
    assertFalse(....);
}

【讨论】:

  • 我不明白这个。存在是显示的吗?如果是这样,那么我会遇到异常,我正在使用 NUnit 框架。
【解决方案2】:

搜索多个元素,如果存在一个(>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 将等待元素出现)。

【讨论】:

    【解决方案3】:

    您的方法仅在元素显示或存在时才有效,否则它将引发异常并且您没有处理该异常,因此脚本对您来说失败了。

    您可以通过处理异常来创建如下方法(我已经用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
            }
    

    希望这能解决您的问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-04
      相关资源
      最近更新 更多