java - 错误:没有这样的元素:无法找到元素:{"method":"link text","selector":"Order Qty"}
问题描述
我的代码有错误,其中我找到了一个文本,但它没有根据我在我的 excel 上的字符串显示。我认为这是由于框架设置所致。
这是我的代码:
'if (driver.findElement(By.linkText(reports)).isDisplayed())
{
System.out.println("report = "+ reports + "does not exist");
}
else
{
System.out.println("report = "+ reports + "does not exist");
}
}
注意report = “Order Qty”(文本是在excel上提取的)
解决方案
尝试使用 XPath 通过文本查找元素,而不是通过 linkText 查找元素。
由于您使用该isDisplayed()
方法来检查元素是否可见,我假设您希望元素有时不可见。在这种情况下,如果元素不可见,它将始终抛出 NoSuchElement 异常。
为避免这种情况,您必须在 try 块中使用条件并在 catch 块中处理异常。或者您可以使用findElements
并检查永远不会抛出异常的列表大小。
正如 Cruisepandey 所提到的,您还应该对元素加载延迟使用显式等待。
String reports = "Order Qty";
List<WebElement> list = new WebDriverWait(driver,30).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//div[@class='kpi-report-wrapper']/h2[contains('"+reports+"')]")));
if(list.isEmpty()){
System.out.println("report = "+reports+ "does not exist" );
}else {
System.out.println("report = "+reports+ "exists");
}
推荐阅读
- intellij-idea - Intellilj Idea TODO 搜索空间以包含其他文件类型,例如 .md 和 .asciidoc
- sparql - SPARQL 查询。三重模式的顺序
- c++ - 谁负责释放由 std::move 移动的资源?
- elasticsearch - 弹性搜索多个“和”查询
- c# - 我需要做什么才能在 Visual Studio 2013 上发布用 c# asp.net 制作的网站?
- php - mysql中的多个插入输入数据
- java - Spring Boot:自定义属性配置和测试
- javascript - 使用鼠标滚轮放大、缩小画布
- ios - Swift Firebase 多线程问题
- scala - 设计用于从通道读取的引用透明函数