java中链接抓取器上的java.lang.NullPointerException,Selenium
我将从Selenium和Java开始我的冒险。我试图创建一个简单的脚本来创建站点上所有链接的列表(它还检查是内部链接还是外部链接)。它列出了我想要的链接,但随后我得到了测试失败和NPE错误java中链接抓取器上的java.lang.NullPointerException,Selenium,java,selenium,selenium-webdriver,nullpointerexception,webdriver,Java,Selenium,Selenium Webdriver,Nullpointerexception,Webdriver,我将从Selenium和Java开始我的冒险。我试图创建一个简单的脚本来创建站点上所有链接的列表(它还检查是内部链接还是外部链接)。它列出了我想要的链接,但随后我得到了测试失败和NPE错误 public class Link_Grab { private WebDriver driver; @BeforeClass public void setup() { System.setProperty("webdriver.chrome.driver","C:/TES
public class Link_Grab {
private WebDriver driver;
@BeforeClass
public void setup() {
System.setProperty("webdriver.chrome.driver","C:/TEST/LIB/chromedriver.exe");
driver = new ChromeDriver();
}
@AfterClass
public void teardown() {
driver.close();
}
@Test
public void grablinks() {
driver.get("https://www.amazon.com");
List<WebElement> links = driver.findElements(By.tagName("a"));
for (int i = 1; i<=links.size(); i=i+1)
{
if((links.get(i).getAttribute("href")).contains("amazon"))
{
System.out.println(links.get(i).getAttribute("href") + " = internal domain");
}
else
{
System.out.println(links.get(i).getAttribute("href") + " = external domain");
}
}
}
}
我的进口:
import java.util.ArrayList;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
你能帮我吗?我找不到此错误的原因。检索到的列表中的最后一个条目(I=links.size())不存在。通过以下方式使用列表中的迭代器可以避免这种情况:
for (WebElement element : links)
或者,如果你坚持使用索引,它应该是
for (int i = 0; i < links.size(); i++)
for(int i=0;i
这里的问题是,一些锚定标记没有href属性,它抛出空指针异常。如果属性不存在,则getAttribute方法返回null。此外,列表索引以0开头。请尝试以下代码
@Test
public void grablinks() {
String hrefvalue = null;
driver.get("https://www.amazon.com");
List<WebElement> links = driver.findElements(By.tagName("a"));
for (int i = 0; i<links.size(); i++)
{
hrefvalue = links.get(i).getAttribute("href");
if(hrefvalue != null){
if(hrefvalue.contains("amazon"))
{
System.out.println( hrefvalue + " = internal domain");
}
else
{
System.out.println( hrefvalue + " = external domain");
}
}else{
System.out.println("element doesn't have href attriubte");
}
}
}
@测试
公共链接(){
字符串hrefvalue=null;
驱动程序。获取(“https://www.amazon.com");
列表链接=driver.findElements(按.tagName(“a”));
对于(int i=0;iYourimports
?这是第36行?第36行:List links=driver.findElements(按.tagName(“a”))
我在原始问题中添加了导入。是的,当我在facebook页面上尝试此脚本时,当我开始获得indexoutofboundsexception时,我发现这就是问题所在。我有两个问题。如果我使用for(WebElement元素:links),应该如何迭代if((links.get(I).getAttribute(“href”)。contains(“amazon”)
?现在我也得到了提到的“if”的NPE,我不明白现在的问题是什么,这个“if”有什么错?代替使用链接。get(I)
使用元素
即if(element.getAttribute(“href”)。包含(“amazon”)
,并为链接的所有未来使用这样做。get(I)
。感谢您的解释。我将代码更改为使用元素,但仍然出现“if”的NPE错误。正如Murthi在下面指出的,在调用.contains(“amazon”)
方法之前,您需要检查该属性是否存在。
@Test
public void grablinks() {
String hrefvalue = null;
driver.get("https://www.amazon.com");
List<WebElement> links = driver.findElements(By.tagName("a"));
for (int i = 0; i<links.size(); i++)
{
hrefvalue = links.get(i).getAttribute("href");
if(hrefvalue != null){
if(hrefvalue.contains("amazon"))
{
System.out.println( hrefvalue + " = internal domain");
}
else
{
System.out.println( hrefvalue + " = external domain");
}
}else{
System.out.println("element doesn't have href attriubte");
}
}
}