使用Selenium JUnit解析HTML文档中的链接

时间:2019-02-09 20:37:51

标签: java selenium junit nullpointerexception

在if(hrefAttr.contains(“?”))处出现NullPointerException

我遇到了问题。我正在使用selenium和JUnit通过链接进行解析,并将它们与CSV文件提供的链接列表进行比较。

一切进展顺利,直到我意识到必须分别测试URL和查询字符串。我试图创建一个if语句,说明href属性是否包含“?”将整个URL拆分为包含两个字符串的数组。 URL目标是索引的第一个字符串,查询字符串是索引的第二个字符串。并返回URL目标并将其附加到ID。如果没有“?”在URL字符串中,只需返回URL字符串并将其附加到ID

我认为逻辑看起来很准确,但是我一直在第76行(href.contains(“?”)条件所在的位置)返回空指针异常。以下代码:

public static ArrayList<String> getURLSFromHTML(WebDriver driver) {

    // prepares variable for array of html link URLs
    ArrayList <String> pageLinksList = new ArrayList<String>();

    // prepares array to place all of the <a></a> tags found in the HTML
    List <WebElement> aElements = driver.findElements(By.tagName("a"));

    // loops through all the <a></a> tags found in the HTML
    for (WebElement aElement : aElements) {

        /*
         * grabs the href attribute value and stores it into a variable
         * grabs the QA_ID attribute value and stores it in a variable
         * concatenates the QA_ID value with the href value and stores them in a variable
         */
        String hrefAttr = aElement.getAttribute("href");
        String QA_ID = aElement.getAttribute("QA_ID");
        String linkConcat;

        if (hrefAttr.contains("?")) {
            String[] splitHref = hrefAttr.split("\\?");
            String URL = splitHref[0];
            linkConcat = QA_ID + "_" + URL;
        } else {
            linkConcat = QA_ID + "_" + hrefAttr;
        }

        String urlIgnoreAttr = aElement.getAttribute("URL_ignore");
        String combIgnore = QA_ID + "_" + urlIgnoreAttr;
        String combIgnoreVal = "ignore";


        /*
         * if the QA_ID is not null then add value to pageLinksList
         * if URL_ignore attribute="ignore" in html, then add combIgnore value to pageLinksList
         * else add linkConcat to pageLinksList
         */
        if(!Objects.isNull(QA_ID)) {
            if (Objects.equals(urlIgnoreAttr, combIgnoreVal)) {
                pageLinksList.add(combIgnore);
            }else {
                pageLinksList.add(linkConcat);
            }
        }
    }

    System.out.println(pageLinksList);
    return pageLinksList;

}

请帮助!

1 个答案:

答案 0 :(得分:2)

显而易见的解决方案是检查null:


        if (hrefAttr != null && hrefAttr.contains("?")) {
            String[] splitHref = hrefAttr.split("\\?");
            String URL = splitHref[0];
            linkConcat = QA_ID + "_" + URL;
        } else {
            linkConcat = QA_ID + "_" + hrefAttr;
        }

没有href属性的锚标记仍然有效。没有html源,我们无法解释href属性缺失的原因。 else分支不会抛出NPE,但是对hrefAttr == null来说,它毫无用处。