我正在使用一个简单的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();
}

我试图将jars更新到最新版本,但我在我的项目中得到了错误.我是否需要将jars更新到任何特定的版本来解决问题?

推荐答案

如果我猜的话...当你在这一行中将text解析为int时会抛出错误,

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

这是因为text返回为空字符串.我猜这是因为页面没有完全加载.我建议你摆脱.findElement()(?)然后在你从元素中提取文本之前添加一个WebDriverWait来表示可见.

我要更新:

  1. .getText()之前添加一个WebDriverWait.
  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();
}

Java相关问答推荐

是否可以从@ TrustMapping中删除特定方法的基路径?

inteliJ中是否有一个功能可以自动在块注释中的/*后面添加一个空格?''

无法传递消费者<;>;实例

Jlink选项&-strie-ative-Commands";的作用是什么?

为什么我要创建一个单独的互斥体/锁对象?

我正在try 跟踪数组中最大的两个数字

MySQL数据库中未应用具有Spring数据的唯一约束

如何在JavaFX中制作鼠标透明stage

使用正则表达式从字符串中提取多个值

没有使用Lombok生成的参数

无法使用Freemarker从XML中读取重复的标记值

JOLT根据值删除并保留其余的json键

在应用getCellFormula()时,Excel引用中的文件名始终为";[1]";使用Apache POI()

如何在ApacheHttpClient 5中为单个请求设置代理?

为什么没有加载java.se模块?

在单例类上获取Java锁,了解原因

使用同步方法中的新线程调用同步方法

OpenJDK20:JEP434:Foreign Function&;内存API(第二次预览)

ResponseEntity.控制器截断响应的JSON部分

ANTLR 接受特殊字符,例如 .标识符或表达式中的(点)和 ,(逗号)