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

Java 使用Selenium和JUnit解析HTML文档中的链接,java,selenium,junit,nullpointerexception,Java,Selenium,Junit,Nullpointerexception,if处的NullPointerException(hrefAttr.contains(“?”) 我遇到了一个问题。我使用selenium和JUnit解析链接,并将它们与CSV文件提供的链接列表进行比较 一切都进展顺利,直到我意识到我必须分别测试URL和查询字符串。我试图创建一个if语句,表示如果href属性包含一个“?”字符,则将整个URL拆分为一个包含两个字符串的数组。URL目标是索引的第一个字符串,查询字符串是索引的第二个字符串。返回URL目的地并将其附加到ID。如果URL字符串中没有“?”

if处的NullPointerException(hrefAttr.contains(“?”)

我遇到了一个问题。我使用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;

}
publicstaticarraylistgeturlsfromHTML(WebDriver驱动程序){
//为html链接URL数组准备变量
ArrayList pageLinksList=新建ArrayList();
//准备数组以放置在HTML中找到的所有标记
列表元素=driver.findElements(按.tagName(“a”));
//循环浏览HTML中找到的所有标记
for(WebElement AEElement:AEElements){
/*
*获取href属性值并将其存储到变量中
*获取QA_ID属性值并将其存储在变量中
*将QA_ID值与href值连接起来,并将其存储在变量中
*/
字符串hrefAttr=AELENT.getAttribute(“href”);
字符串QA_ID=aeelement.getAttribute(“QA_ID”);
字符串链接concat;
if(hrefAttr.contains(“?”){
字符串[]splitHref=hrefAttr.split(“\\?”);
字符串URL=splitHref[0];
linkConcat=QA_ID+“_”+URL;
}否则{
linkConcat=QA_ID+“_”+hrefAttr;
}
字符串urlIgnoreAttr=aeelement.getAttribute(“URL_ignore”);
字符串combIgnore=QA_ID+“”+urlIgnoreAttr;
字符串combIgnoreVal=“忽略”;
/*
*如果QA_ID不为null,则将值添加到pageLinksList
*如果URL_ignore attribute=“ignore”在html中,则将combIgnore值添加到页面链接列表中
*否则将linkConcat添加到页面链接列表
*/
如果(!Objects.isNull(QA_ID)){
if(Objects.equals(urlIgnoreAttr,combIgnoreVal)){
pageLinksList.add(忽略);
}否则{
pageLinksList.add(linkConcat);
}
}
}
System.out.println(页面链接列表);
返回页面链接列表;
}

请帮助!

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


        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
,它将无效