【问题标题】:Selenium-Asserting the presence of multiple keywords of an array in a ListSelenium-断言列表中存在数组的多个关键字
【发布时间】:2017-11-21 13:04:48
【问题描述】:

尝试检查列表中是否存在多个关键字。

List<String> array=new ArrayList<String>();
array.add("Sam Mayers test");
array.add("");
array.add("value");
array.add("");
array.add("");
array.add("");
array.add("District 49");
array.add("Till the last test");
array.add("Dawn Strings");
array.add("Lists value");
array.add("");
array.add("");
array.add("Total Hits Lists");
array.add("Values");


Boolean found = false;

        List<String> keywords_tobe_checked = new ArrayList<>();
        keywords_tobe_checked.add("Lists");
        keywords_tobe_checked.add("value");
        keywords_tobe_checked.add("Mayers");
        List<String> dummylist = new ArrayList<>();

        for (int i = 0; i < array.size(); i++) {
            String val = array.get(i);
            for (int j = 0; j < keywords_tobe_checked.size(); j++) {
            if (val.indexOf(keywords_tobe_checked.get(j)) >= 0) {
                dummylist.add(val);
            }
            }
        }
        System.out.println(dummylist);

        Assert.assertTrue(dummylist.containsAll(keywords_tobe_checked), "Its not correct");

我上面的代码在 asserttrue 条件下失败并给我一个不正确的结果。

有没有一种方法可以通过“keywords_tobe_checked”中提到的所有关键字都出现在“dummylist”中的条件来传递这个断言?

已尝试更新代码:

List<String> array=new ArrayList<String>();
        array.add("Sam Mayers test");
        array.add("");
        array.add("value");
        array.add("");
        array.add("");
        array.add("");
        array.add("District 49");
        array.add("Till the last test");
        array.add("Dawn Strings");
        array.add("Lists value");
        array.add("");
        array.add("");
        array.add("Total Hits Lists");
        array.add("Values");



        List<String> keywords_tobe_checked = new ArrayList<>();
        keywords_tobe_checked.add("Lists");
        keywords_tobe_checked.add("value");
        keywords_tobe_checked.add("Mayers");

        System.out.println(array);
        System.out.println(keywords_tobe_checked);
        for (String keyword : keywords_tobe_checked) {
            Boolean found = false;  
            for (String value : array) {
                if (value.contains(keyword)) {
                    found = true;
                    break;
                }
                Assert.assertTrue(found, "The keyword " + keyword + " not in the list");
            }

        }


 Content of the Array------------       [Sam Mayers test, , value, , , , District 49, Till the last test, Dawn Strings, Lists value, , , Total Hits Lists, Values]
  Content of the Keywords to be checked -----------------  [Lists, value, Mayers]
    Exception in thread "main" java.lang.AssertionError: The keyword Lists not in the list expected [true] but found [false]
        at org.testng.Assert.fail(Assert.java:94)
        at org.testng.Assert.failNotEquals(Assert.java:496)
        at org.testng.Assert.assertTrue(Assert.java:42)

【问题讨论】:

    标签: java selenium selenium-webdriver automation assert


    【解决方案1】:

    当检查List 是否包含String 时,结果只有在完全匹配时才会为真

    array.contains("Lists"); // false
    
    array.contains("Lists value"); // true
    

    要检查部分匹配,您需要在循环内使用Assert.assertTrue

    for (String keyword : keywords_tobe_checked) {
        boolean hasKeyword = false;
        for (String value : array) {
            if (value.contains(keyword)) {
                hasKeyword = true;
                break;
            }
        }
    
        Assert.assertTrue(hasKeyword, "The keyword " + keyword + " is in the list");
    }
    

    【讨论】:

    • 我无法编辑您的帖子。你的答案是正确的,你只是在break;之后缺少}
    • 不完全按照我想要的方式工作......再次获得断言失败,因为“线程“main”中的异常java.lang.AssertionError:关键字列表不在预期的列表中[true]但找到了[假]”
    • @Guy 我已经添加了我尝试使用你给定逻辑的更新代码,但它仍然给我一个断言失败。
    • @Automation_User 运行时dummylist 中的值是什么?另外,您是否从某个地方复制了字符串?可能存在编码差异,请尝试手动编写。
    • @Automation_User 确保您使用的代码缺少},因为之前的版本会抛出AssertionError
    【解决方案2】:

    由于数组列表中的值,您在代码中执行的操作不正确。

    使用containsAll 方法时,您正在数组列表中查找特定字符串。

    示例: 第一个列表有对象Sam Mayers test。 第二个列表有对象Mayers

    这就是你有 AssertionError 的原因。 Sam Mayers testMayers 完全是两个不同的对象。

    【讨论】:

      猜你喜欢
      • 2017-10-30
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-24
      相关资源
      最近更新 更多