我正在使用一个简单的 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 更新到任何特定版本才能解决问题?
如果我猜...当您将
text
解析为这一行上的 int
时,会引发错误,
Assert.assertEquals(Integer.parseInt(text) > 0, true);
^^^^^^^^^^^^^^^^^^^^^^
这是因为
text
作为空字符串返回。我猜这是因为页面未完全加载。我建议您摆脱 .findElement()
(???) 之后的睡眠,并在从元素中提取文本之前添加 WebDriverWait
表示可见。
我会更新:
WebDriverWait
之前添加 .getText()
以使其可见。By.id()
而不是 By.xpath()
。Assert.isTrue()
。更新代码
@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();
}