Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中链接抓取器上的java.lang.NullPointerException,Selenium_Java_Selenium_Selenium Webdriver_Nullpointerexception_Webdriver - Fatal编程技术网

java中链接抓取器上的java.lang.NullPointerException,Selenium

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

我将从Selenium和Java开始我的冒险。我试图创建一个简单的脚本来创建站点上所有链接的列表(它还检查是内部链接还是外部链接)。它列出了我想要的链接,但随后我得到了测试失败和NPE错误

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;iYour
imports
?这是第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");
       }
    }

}