Cucumber TestNG 断言失败并出现 java.lang.NumberFormatException

问题描述 投票:0回答:1

我正在使用一个简单的 Maven 项目。每当我在黄瓜中运行断言时,它都会失败。但当我在正常项目中运行时,工作完美。

Error: java.lang.NumberFormatException: For input string: ""

我的依赖:

<dependencies>
    <!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-java -->
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-java</artifactId>
        <version>4.2.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-testng-->
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-testng</artifactId>
        <version>4.2.2</version>
    </dependency> 
</dependencies>

我的代码:

@Then("the cart badge should be updated")
public void theCartBadgeShouldBeUpdated() throws InterruptedException {
    String text = driver.findElement(By.xpath("//span[@id='mat-badge-content-0']")).getText();
    Thread.sleep(3000);
    Assert.assertEquals(Integer.parseInt(text)>0, true);
    driver.quit();
}

我尝试将 jar 更新到最新版本,但我的项目中出现错误。我是否需要将 jar 更新到任何特定版本才能解决问题?

java selenium-webdriver cucumber bdd assert
1个回答
0
投票

如果我猜...当您将

text
解析为这一行上的
int
时,会引发错误,

Assert.assertEquals(Integer.parseInt(text) > 0, true);
                    ^^^^^^^^^^^^^^^^^^^^^^

这是因为

text
作为空字符串返回。我猜这是因为页面未完全加载。我建议您摆脱
.findElement()
(???) 之后的睡眠,并在从元素中提取文本之前添加
WebDriverWait
表示可见。

我会更新:

  1. WebDriverWait
    之前添加
    .getText()
    以使其可见。
  2. 如果您通过 ID 查找元素,请使用
    By.id()
    而不是
    By.xpath()
  3. 取消睡眠,这是一种不好的做法,会减慢你的测试速度。
  4. 既然你断言某件事是真的,请使用
    Assert.isTrue()
  5. 始终向断言添加字符串注释...当断言失败时,可以更轻松地确定正在测试的内容。

更新代码

@Then("the cart badge should be updated")
public void theCartBadgeShouldBeUpdated() throws InterruptedException {
    String text = new WebDriverWait(driver, Duration.ofSeconds(10)).until(ExpectedConditions.visibilityOfElementLocated(By.id("mat-badge-content-0"))).getText();
    Assert.isTrue(Integer.parseInt(text) > 0, "Verify that the number in the cart badge is not zero.");
    driver.quit();
}
© www.soinside.com 2019 - 2024. All rights reserved.