【问题标题】:Testng assert with DataProvider object values带有 DataProvider 对象值的 Testng 断言
【发布时间】:2022-01-27 16:08:46
【问题描述】:

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

这是我的示例数据

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

【问题讨论】:

    标签: selenium testng assertion testng-dataprovider


    【解决方案1】:

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

    1. 将第 3 项添加到 data-provider 并带有您期望的错误消息文本。因此,每个电子邮件/密码都将与错误消息相关联。
    @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();
    }
    

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

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      • 2022-04-20
      • 1970-01-01
      相关资源
      最近更新 更多