当实际消息中的行发生变化时如何将实际消息与预期消息进行比较

How to compare actual message with expected message when the lines in actual message are changing

我正在尝试通过 java-selenium.But 比较以下消息 在 execution.Please 期间,实际消息中的行正在更改 让我知道如何处理它。

例如:

String expMsg="Line1.\n"
+ "Line2\n" 
+ "Line3\n" 
+ "Line4\n" 
+ Line5\n" + "\n"
+ "Line6."


String actMsg="Line1.\n"
+ "Line3\n" 
+ "Line2\n" 
+ "Line5\n" 
+ Line4\n" + "\n"
+ "Line6."

我尝试了以下但失败了:

if(actMsg.contains(expMsg){
System.out.println("both the messages are same")
}

请告诉我如何解决这个问题。

据我了解,actualMessage 的顺序无关紧要,您只需要检查 actualMessage 中是否存在所有 expectedMessage 即可?在这种情况下,将每一行保存在单独的 variable/array 中,然后验证每个 expectedMessage 是否存在于实际使用的包含中。 `

for(i=1, i<6, i++) {
     if(actMsg.contains(expMsg+i){
     System.out.println("both the messages are same")
     }else 
     System.out.println("both the messages are not same")
 }

`

让我知道这是否有效

将您的 String 转换为 Stream

Arrays.stream(actMsg.split("\n"));

然后

这是我如何解决你的例子:

List<String> expMsg = Arrays.asList("Line1", "Line2", "Line3", "Line4", "Line5", "Line6");

String actMsg = "Line1.\n"
                + "Line3\n"
                + "Line2\n"
                + "Line5\n"
                + "Line4\n" + "\n"
                + "Line6.";

boolean containsAll = expMsg.stream()

                            //select only elements which are in actMsg
                            .filter(actMsg::contains) //e -> actMsg.contains(e)

                            //all strings from expMsg should be present
                            .count() == expMsg.size();


System.out.println(containsAll);

拆分 expMsg 中的所有行并检查是否所有行都在 actMsg.