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

Selenium checking isDisplayed equals false抛出NoSuchElementException

关翰
2023-03-14

当我检查某个元素的isDisplayed()是否等于false时,我得到的是NoTouchElementException。这是我的代码:

XYZpage.java:

public WebElement cancelButton() { return driver.findElement(By.cssSelector(".cancelButton")); }

XYZtest.java:

softAssertions.assertThat(sellerVehicleEditPage.cancelButton().isDisplayed())
            .isEqualTo(false);

我在这里断言没有显示元素。我在这个网站和其他地方看到了其他的解决方案,在这些地方,人们建议尝试预期条件等。但由于元素不存在,甚至ExpectedConditions最终也不会抛出任何TouchElementException。这是我在XYZpage中尝试的。java:

WebDriverWait wait = new WebDriverWait(driver, 5);
public WebElement cancelButton() { return wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".cancelButton"))); }

我有1000多个元素,每个元素在不同的测试中多次使用。所以我不想每次需要调用元素时都通过,正如一些解决方案所建议的那样。有没有更优雅的方法来检查像. isDisplay()等于false这样的条件而不会得到NoSuchElementException?

共有1个答案

鲁城
2023-03-14

Selenium Web驱动程序无法找到与您在那里使用的定位器匹配的元素,这就是抛出NoSuchElementException异常的原因。
isDisplay()方法可以应用于返回的Web元素

driver.findElement(By.cssSelector(".cancelButton"))

或由

wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".cancelButton")))

方法
但不涉及此方法,因为在此之前会引发NoTouchElementException异常,并且在此点上会中断流程
要等待元素存在,可以使用以下方法:

public boolean waitForElementPresence(By element){
    WebDriverWait wait = new WebDriverWait(driver);
    try {
        wait.until(ExpectedConditions.presenceOfElementLocated(element));
        return true;
    }catch (Throwable t){
        return false;
    }
}

要等待元素可见性:

public boolean waitForElementVisibility(By element){
    WebDriverWait wait = new WebDriverWait(driver);
    try {
        wait.until(ExpectedConditions.visibilityOfElementLocated(element));
        return true;
    }catch (Throwable t){
        return false;
    }
}

对于更简单的元素存在验证:

public boolean isElementFound(By element){
    wait(300);
    return !driver.findElements(element).isEmpty();
}

UPD将WebElement用作参数:

public boolean waitForElementVisibility(WebElement element){
    WebDriverWait wait = new WebDriverWait(driver);
    try {
        wait.until(ExpectedConditions.visibilityOf(element));
        return true;
    }catch (Throwable t){
        return false;
    }
}

 类似资料:
  • 抛出异常的行为是否可能抛出不同的异常? 为了抛出异常,必须(可选地)分配新对象,并调用其构造函数(隐式调用fillinstacktrace)。在某些情况下,听起来像addSupressed也被称为。那么如果没有足够的内存会发生什么呢?JVM是否需要预分配内置异常?例如,(1/0)会抛出OutOfMemoryError而不是ArithmeticException吗? 此外,构造函数是一个方法调用,因

  • 问题内容: 我正在使用“ mvn install”编译一个开源项目,但最终结果为。我尝试执行,但输出为Java摘要,指示这是无效命令。 我正在使用,为什么会发生这种情况? 谢谢, 问题答案: 设置环境变量:

  • 问题内容: 当我遍历列表时,偶尔会得到一个。Google搜索通知我,这可能是因为我在迭代该列表时正在另一个线程中更改该列表,并且要使此问题消失,我应该使用…。 …除了我已经是。 显然,我在某处正在做一些 非常 愚蠢的事情。 是否有人对如何引发抛掷物有任何见识?如果有关系,我正在使用Java 5。 编辑: 由于我使用的转换器可能很重要,因此我以两种方式修改此列表: 在前面添加元素。() 使用subL

  • 问题内容: Java程序中的“思考”如下: 我期望输出如下: 但是得到 显然,try块抛出ClassNotFoundException,这是意外的。有什么想法为什么代码会抛出此错误而不是像预期的那样初始化Gum类? 问题答案: 你的类在包,所以他们完全合格的名称,和。仅接受标准名称: 参数: -所需类的完全限定名称。 将您的代码更改为:

  • 问题内容: 我想在我的存储库层中有一个选项来渴望加载实体,所以我尝试添加一种方法来渴望加载具有所有关系的问题实体,但是它会抛出MultipleBagFetchException。我怎样才能解决这个问题?我正在使用Hibernate 4.16。 我如何获得一个最初是延迟加载的问题对象,以期渴望加载所有关系? 问题答案: 在Hibernate和通常的ORM中,这是一个相当棘手的问题。 发生的情况是,许

  • 问题内容: 我想从我的对象生成一个JSON字符串: 每当我尝试这样做时,都会出现此错误: 这些是我的 BomItem 类的属性: 我引用的 BomModule 类的属性: 知道导致此错误的原因是什么?我该如何解决? 问题答案: 问题是您有一个循环引用。 在课程中,您引用的是: 显然,GSON完全不喜欢这种自我指涉。 解决方法是将模块设置为避免递归循环。这样我可以避免StackOverFlow-Ex

  • 问题内容: 我正在使用 gson 将 json 字符串转换为Java对象。值 RESULT2 是完全一样的值 RESULT1 。(从调试器复制;添加了反斜杠) 转换result1时会引发以下异常: com.google.gson.JsonSyntaxException:com.google.gson.stream.MalformedJsonException:预期的EOF在第1行的第170列 转换

  • 问题内容: wait(…)的所有变体都从以下代码引发以下异常。我究竟做错了什么? 问题答案: 如果您已使用获取了锁,则只能在该对象上使用。 我不知道您是否 打算使用WebDriver 来使用-如果需要,则需要类似以下内容: 但是,如果您正在等待某些事情发生,则很有可能会使用另一种方法。也许吧?