#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. это была отличная информация, и я считаю, что теперь она делает то, что я ожидал, спасибо