首页 > 解决方案 > 为什么我的脚本在 if 条件下失败?

问题描述

嗨,我有这个 if 语句,我用它来尝试验证页面上是否存在元素(它可以存在,有时它在特定场景中不存在)

脚本在 if 语句条件的行上失败(当元素不显示时,因为它不存在)

  public void checker()
        {
           WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));           
           openDocDrawer();

           if (isDisplayed(rowsWithinDrawer))
           {
               documentDrawerCloser();
               wait.Until(driver => docDrawerButton.Displayed);
               Console.Writeline("is displayed")
           }                                
           else 
           {
               reviewStageCreatorTimeSpan();
               documentDrawerCloser();
               wait.Until(driver => docDrawerButton.Displayed);
               Console.Writeline("is displayed")

           }
          
        }

这是堆栈跟踪

  Message: 
    OpenQA.Selenium.NoSuchElementException : no such element: Unable to locate element: {"method":"css selector","selector":"mat-row"}
      (Session info: chrome=86.0.4240.111)
  Stack Trace: 
    RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
    RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
    RemoteWebDriver.FindElement(String mechanism, String value)
    RemoteWebDriver.FindElementByCssSelector(String cssSelector)

如果条件为假,因为元素不存在,它不应该执行 else 语句吗?为什么它在 if 条件下失败并终止程序?

标签: c#seleniumselenium-webdriverautomation

解决方案


https://www.selenium.dev/selenium/docs/api/java/org/openqa/selenium/NoSuchElementException.html

如文档中所定义,当您尝试查找不存在的元素时会抛出此错误

由 WebDriver.findElement(By by) 和 WebElement.findElement(By by) 抛出。

Selenium 假设既然您正在搜索它,那么它一定存在。如果没有,那么它会假设某些事情发生了可怕的错误并且失败并出现异常。

在这些情况下,当您知道这不是异常情况时,您可以捕获异常并自己分配布尔值。

bool elementExists;

try {
   elementExists = isDisplayed(rowsWithinDrawer);
}
catch (NoSuchElementException ex) {
   elementExists = false;
}

if (elementExists) // etc

推荐阅读