Próbuję umieścić warunek if else w oświadczeniu assert

Próbowałem tego, ale nie działa, muszę zweryfikować dwa ciągi jeden po drugim

String comment = driver.findElement(By.xpath("//*[@id='historyRow']/tbody/tr[1]/td[4]")).getText();
        System.out.println(comment);
        if (comment == "abc") {
            Assert.assertEquals(comment, "abc");
        }
        else{
            Assert.assertEquals(comment, "xy");
        }
        driver.findElement(By.linkText("Details")).click();
1
sapana 20 listopad 2019, 13:58
Czy próbujesz porównać wartości komentarza i „abc”? Jeśli tak, po co dowodzić tego, co już wiesz?
 – 
Stultuske
20 listopad 2019, 14:07
Mrše Just info: przez pocztę pochodzenia, driver.findElement(By.linkText("Details")).click(); nie wewnątrz bloku else.
 – 
frianH
20 listopad 2019, 14:12
Możesz otoczyć swoje twierdzenia try-catch
 – 
ou_ryperd
20 listopad 2019, 14:15
Próbuję zweryfikowaćdwa różne Ciągi za pomocą asercji Jeśli pierwszy ciąg to „abc” zweryfikuj pierwszy ciąg a jeśli to „xyz” zweryfikuj drugi ciąg
 – 
sapana
20 listopad 2019, 14:23
1
Przepraszamy, naprawiono!
 – 
Mate Mrše
20 listopad 2019, 14:37

3 odpowiedzi

Używasz == do porównywania ciągów. Ponieważ ciągi znaków są obiektami, sprawdza, czy obie strony odnoszą się do dokładnie tego samego obiektu. Jeśli chcesz sprawdzić, czy wartość Strings jest równa, użyj:

"abc".equals(comment)

2
Rick 20 listopad 2019, 14:04

Wygląda na to, że chcesz porównać z warunkiem or, sugeruję użycie .assertTrue.

Użyj .equals(), aby porównać ciąg, a nie ==.

String comment = driver.findElement(By.xpath("//*[@id='historyRow']/tbody/tr[1]/td[4]")).getText();

boolean condition = false;
if(comment.equals("abc") || comment.equals("xy")) {
    condition = true;
}

Assert.assertTrue(condition);
2
frianH 20 listopad 2019, 14:41

Której biblioteki używasz do asercji? Oto jak możesz potwierdzić, jeśli string jest równy jednemu z kilku z junit:

String s1 = "abc";
String s2 = "xyz";
String s3 = "https://junit.org";
Assert.assertThat( s1, AnyOf.anyOf( IsEqual.equalTo( "abc" ), IsEqual.equalTo( "xyz" ) ) ); // passed
Assert.assertThat( s2, AnyOf.anyOf( IsEqual.equalTo( "abc" ), IsEqual.equalTo( "xyz" ) ) ); // passed
Assert.assertThat( s3, AnyOf.anyOf( IsEqual.equalTo( "abc" ), IsEqual.equalTo( "xyz" ) ) ); // failed

Inny sposób na to samo potwierdzenie, którego możesz użyć zarówno z junit, jak i testNG:

Assert.assertTrue(s1.matches( "abc|xyz" )); // passed
Assert.assertTrue(s2.matches( "abc|xyz" )); // passed
Assert.assertTrue(s3.matches( "abc|xyz" )); // failed

Różnica polega na komunikatach o błędach.

Pierwszy:

java.lang.Błąd potwierdzenia: Oczekiwane: („abc” lub „xyz”) ale: było „https://junit.org"

A po drugie - po prostu pusty błąd asercji.

1
Gennady Zyablitsev 20 listopad 2019, 15:03