Почему мой скрипт терпит неудачу при условии if?

#c# #selenium #selenium-webdriver #automation

#c# #селен #selenium-webdriver #автоматизация

Вопрос:

Привет, у меня есть этот оператор 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)
  

если условие равно false, потому что элемент не существует, не следует ли ему выполнить оператор else? почему он терпит неудачу при условии if и завершает работу программы?

Комментарии:

1. это не false, потому что элемент не существует . но метод выдает исключение. это программа говорит вам: «Эй! я потерпел неудачу исключительным образом — вам нужно перехватить и обработать этот крайний случай »

Ответ №1:

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
  

Комментарии:

1. это была отличная информация, и я считаю, что теперь она делает то, что я ожидал, спасибо