在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;
}
请帮助!
答案 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
来说,它毫无用处。