c# - 为什么我的脚本在 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 条件下失败并终止程序?
解决方案
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
推荐阅读
- python - 如何获取 Python Requests Library 每次重试尝试的日志?
- c - 这是什么错误,我该如何解决?错误:在 '{' 标记之前应有 '='、','、';'、'asm' 或 '__attribute__'
- android - 在 Android 中将 MySql 查询转换为 SQL Room 查询 - kotlin
- python - pygame 和 pygame.SOMETHING 之间的区别
- web - VB.NET 上传到我的网站后如何自动处理字符串或文件(激活过程)?
- python - 如何修复此 dbus 安装错误?
- python - 在 SQLAlchemy 的 SQL 表达式语言模式下控制缓存
- visual-studio - 如何创建具有不同项目引用的解决方案(在 NuGet 编译或项目之间进行选择)?
- c++ - 在 C++ 中的多个线程中将表从一个数据库复制到另一个数据库
- ssl - 如何使用 celery 执行器在 Airflow 上配置 SSL?