使用DataProvider对象值测试断言



我创建了一个函数测试错误登录测试,但我想用这些循环测试断言

这是我的样本数据

@DataProvider(name = "Lgindataprovides")
public Object[][] getData(){
Object[][] data= {  
{"abcd@mail.com","12345666"}#email and password wrong (asset text = enter email is not available please register) 
{"xyz@mail.com","12345666"},#email correct password wrong (assert text = password is wrong)
return data;
}

这是我的测试

@Test(dataProvider = "Lgindataprovides", dependsOnMethods = "boofoo")
public void logintest(String email, String passowrd) {
driver.get("https://dummyurl/login");
driver.findElement(By.id("email")).sendKeys(email);
driver.findElement(By.id("password")).sendKeys(passowrd);
driver.findElement(By.cssSelector("button[type='submit']"));
Assert.assertEquals(get1stdatatest, "enter email is not available please register")
Assert.assertEquals(get2nderrordatatest, "password is wrong")
}

但是如果这个测试用例失败了,我该如何处理?我想要的是

  1. 当该数据CCD_ 1被传递到登录测试时;输入电子邮件不可用,请注册";

  2. 当该数据CCD_ 2被传递到登录测试时;输入电子邮件不可用,请注册";

我明白了,您需要检查每个测试数据对的唯一错误消息。

  1. 将第三项添加到数据提供程序中,其中包含您所需的错误消息文本。因此,每个电子邮件/密码都将与错误消息链接
@DataProvider(name = "Lgindataprovides")
public Object[][] getData(){
Object[][] data= {  
{"abcd@mail.com","12345666", "error-message-1"},
{"xyz@mail.com","12345666", "error-message-2"}
}
return data;
}
  1. 将第三个参数添加到测试中,并断言实际错误与预期匹配
@Test(dataProvider = "Lgindataprovides", dependsOnMethods = "boofoo")
public void logintest(String email, String passowrd, String expectedError) {
driver.get("https://dummyurl/login");
driver.findElement(By.id("email")).sendKeys(email);
driver.findElement(By.id("password")).sendKeys(passowrd);
driver.findElement(By.cssSelector("button[type='submit']"));
Assert.assertEquals(getActualErrorMessage(driver), expectedError)
}
  1. 调整获取实际错误消息文本的方法。你的driver.findElement定位器可以找到密码或电子邮件错误消息。您可能会尝试使用xpath并按某个类//*[contains(@class, 'some-error-class']进行搜索。所以,你会在表单上得到任何错误消息文本,它应该可以工作
private String getActualErrorMessage(WebDriver driver) {
driver.findElement(By.xpath("...")).getText();
}

您也可以在不创建新方法的情况下以内联方式执行此操作。如果需要,还可以添加一些等待/超时。

最新更新