当前位置: 首页 > 知识库问答 >
问题:

如果Selenium webdriver中的页面上不存在元素,如何获取false

邹曦之
2023-03-14

我现在和自动化一起工作,一次又一次面临一个问题。一般来说,我的代码中有逻辑,我需要检查一个元素的存在,下一步将取决于检查的结果。但是硒的基本工具只返回布尔值true,否则NoSuchElementException。但是我需要“假”。

与我之前的项目一样,我现在使用简单包装器来解决这个问题:

private boolean isDisplayedOnPage(WebElementFacade wef){
    try{
        return wef.isDisplayed();
    } catch (NoSuchElementException nsee){
        return false;
    }
}

它工作得很好,但是异常的使用让我困惑。此外,我读到过“等待”,但它也没有返回false,只是让我忽略了异常。硒中有内置的工具来解决这个问题吗?或者也许有人可以提供一个更优雅的方法来解决它?

共有3个答案

公西飞鸾
2023-03-14

一个不干净的解决方法可能是检查DOM中是否有一个唯一的字符串来表示您的WebElement,然后如果可以找到它,则写入布尔值。

此循环将每秒检查DOM中的字符串60次,如果未找到任何内容,则刷新页面:

for (int i= 0; i <60; i++){
  String pageSource = browser.getPageSource().toString();
  boolean elementThere = pageSource.contains("uniqueStringOfElement");
if (elementThere){
  browser.WebElement.click()
  break;
 } 
else {
  Thread.sleep(1000); 
  browser.navigate().refresh();
 }
}
刁浩言
2023-03-14
Boolean bool = my_driver.findElements(By.id("my element id")).size()>0;

这将帮助你。

丁勇
2023-03-14

原始WebDriver API的核心原则之一是期望用户知道被自动化页面的DOM状态。这意味着,在API的逻辑中,使用不存在的元素的定位器调用findElement是一种例外情况,使得抛出异常完全合法。虽然有人可能会认为API行为中内置的期望是错误的,但这超出了这个答案的范围。如果您需要布尔逻辑来判断元素是否存在,那么您需要一个包装器方法,正如您已经发现的那样。在该包装器方法中,您有两个选择:

>

  • 使用findElement并捕获NoSuchElementException。请注意,使用WebDriverWatch会隐式为您捕获此异常,因此是语义等价物。

    使用findElements(注意“s”),如果元素不存在,则返回空列表而不引发异常。

  •  类似资料:
    • 我正在使用Selenium(Java版本)测试一个基于OpenLayers的API。 我想测试一个使用的功能。控制修改功能。我想单击绘制的特征(SVG),然后拖动并检查它们是否存在、可见或隐藏。 我已经画了一个多边形,并且选择了它。见下图: 这些SVG元素的HTML如下所示: 假设我想选择红点。 我试过: 但是它总是返回一个空列表。 我做错了什么?有人能帮我吗? 多谢了。 编辑1-功能:垂直显示可

    • 本文向大家介绍iframe父页面如何获取子页面的元素?相关面试题,主要包含被问及iframe父页面如何获取子页面的元素?时的应答技巧和注意事项,需要的朋友参考一下 在父页面监听 onmessage,子页面 postMessage。 $('iframe')[0].contentWindow.document.getElementById document.frames['xx'].document.

    • 目前,我正在尝试使用SeleniumWebDriver捕获一个屏幕截图。但我只能获得整个页面的屏幕截图。然而,我想要的只是捕获页面的一部分,或者基于ID或任何特定元素定位器捕获特定元素。(例如,我希望用image id=“Butterfly”捕捉图片) 有没有办法按所选项目或元素捕获屏幕截图?

    • 本文向大家介绍如何用jst获取DOM元素在页面中的绝对位置?相关面试题,主要包含被问及如何用jst获取DOM元素在页面中的绝对位置?时的应答技巧和注意事项,需要的朋友参考一下 递归获取 参考

    • 在端口20436上启动ChromeDriver(V2.9.248315)线程“main”org.openqa.selenium.noSuchelementException异常:没有这样的元素 (会话信息:chrome=53.0.2785.143)(驱动程序信息:ChromeDriver=2.9.248315,platform=Windows NT 6.1 SP1 x86_64)(警告:服务器没有

    • 问题内容: 我有一个包含以下内容: 现在我所知道的只是对象名称(统计信息), 不知道 它是 元素编号 还是它的 元素名称 ,因此,有一种方法可以解析该对象,以便我可以获取它的元素并进行处理(例如,约翰罗斯)? 问题答案: 为了以动态方式获取这些项目: