为什么我的脚本在 if 条件下失败?

Why is my script failing on the if conditional?

您好,我有这个 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 条件下失败并终止程序?

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

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

Thrown by WebDriver.findElement(By by) and WebElement.findElement(By by).

Selenium 假设既然你在搜索它,那么它就一定存在。如果没有,则它会假设出现了严重错误并因异常而失败。

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

bool elementExists;

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

if (elementExists) // etc