我是Java初学者,我尝试在JUnit中执行数据驱动的测试以进行练习。我想检查预期的定位符是否等于我的“ UsernameVerification()”方法生成的实际定位符。目前,我的测试所引用的类中有以下代码块:

    public void UsernameVerification() {
        ChromeDriver driver = new ChromeDriver();
        driver.get(LOGINPAGE);
        WebElement username = driver.findElement(By.cssSelector("#username"));
        username.sendKeys("[email protected]");
    }


这是我对应的测试类:

@Test
public void test(){
    DataDriven test = new DataDriven();
    test.UsernameVerification();
    assertEquals("#username", test);
}


运行测试时,出现此错误:

org.opentest4j.AssertionFailedError:预期:,但是:

预期的:#用户名

实际的:DataDriven @ 6c372fe6

我怀疑问题是JVM不知道应该将locator与UsernameVerification()方法的哪个部分进行比较...或者'assertEquals'与'equals'确实有点过分。

有没有一种方法可以通过使'assertEquals'比较我的UsernameVerification()方法中的'username'WebElement与我输入的预期定位符来通过测试?

抱歉,缺少适当的术语。我对对象引用在Java中的工作方式进行了一些研究,虽然有点了解但不确定如何解决这个问题。

最佳答案

在这里,test是对DataDriven类实例的引用,而"#username"是字符串。字符串不能等于用户名,出于相同的原因,任何给定的枪支都不可能与任何给定的祖母相同。这些是非常不同的对象,因此尝试比较两个结果的速度非常快:不,当然它们是不同的。

该错误消息看起来像一个内存地址,但这仅是因为它正在调用DataDriven的默认toString()方法,该方法以这种方式自行打印。该地址不是比较例程的一部分。

检查DataDriven是否具有equals方法。如果不是,则编写它;如果不能,则不能将assertEquals与DataDriven实例一起使用。如果确实如此,那就太好了-您可以将DataDriven的一个实例与另一个实例进行比较。

或者,向DataDriven实例查询某个值,然后针对"#username"检查THAT。例如:assertEquals("#username", test.getUsername())。我不知道DataDriven是什么或它的外观,所以我假设它具有getUsername()方法。您正在寻找类似的东西(当然,并确保它返回String,或者您仍在比较枪支和祖母。

09-28 02:36