使用 DataProvider 对象值进行 Testng 断言

Testng assert with DataProvider object values

我创建了一个功能测试错误登录测试,但我想用那些循环测试来断言

这是我的示例数据

      @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. 当此数据"abcd@mail.com","12345666" 传递给登录测试时,它应该断言“输入电子邮件不可用,请注册”

  2. 当此数据xyz@mail.com","12345666 传递给登录测试时,它应该断言“输入电子邮件不可用,请注册”

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

  1. 将第 3 项添加到数据提供程序,其中包含您期望的错误消息文本。因此,每个 email/password 都将与错误消息相关联。
@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 并按 class //*[contains(@class, 'some-error-class'] 进行搜索。因此,您会在表单上收到任何错误消息文本,它应该可以正常工作。
private String getActualErrorMessage(WebDriver driver) {
    driver.findElement(By.xpath("...")).getText();
}

您也可以在不创建新方法的情况下进行内联。如果需要,还可以添加一些 waits/timeouts。