在线程" main"中接收"异常显示java.lang.NullPointerException"使用Selenium时

时间:2018-02-15 11:25:09

标签: java selenium

在Selenium WebDriver中使用此类时:

package Selenium3;

import java.util.ArrayList;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

public class Jobs {

static WebDriver driver;

public Jobs(WebDriver driver) {
    this.driver = driver;
}

public static void con() throws InterruptedException {
    List<WebElement> element = driver.findElements(By.cssSelector(".position_title.ng-binding"));
    for (int i = 0; i < element.size(); i++) {
        Thread.sleep(2000);
        String u = element.get(i).getText();
        if (u.contains("Java"));
        System.out.println(u);
    }
  }
}

驱动程序始终为null。最后我想从我的Main类中调用这个方法。我做错了什么?

1 个答案:

答案 0 :(得分:3)

你有一个static方法(不需要类实例化)...所以当你在没有实例化类的情况下调用方法时,你不会初始化你的驱动程序:

您有各种解决方案:

  • 使方法不是static (您将强制使用构造函数初始化驱动程序,但您可以多次重用实例化的类)

    public class Jobs {
    
        private WebDriver driver;
    
        public Jobs(WebDriver driver) {
           this.driver = driver;
        }
    
        public void con() throws InterruptedException {
            List<WebElement> element = driver.findElements(By.cssSelector(".position_title.ng-binding"));
            for (int i = 0; i < element.size(); i++) {
                Thread.sleep(2000);
                String u = element.get(i).getText();
                if (u.contains("Java"));
                System.out.println(u);
            }
    }
    
  • 保留方法static添加驱动程序作为参数 (因此您将在调用方法之前使用驱动程序,并且您不需要实例化类)

    public class Jobs {
        public static void con(WebDriver driver) throws InterruptedException {
            List<WebElement> element = driver.findElements(By.cssSelector(".position_title.ng-binding"));
            for (int i = 0; i < element.size(); i++) {
                Thread.sleep(2000);
                String u = element.get(i).getText();
                if (u.contains("Java"));
                System.out.println(u);
            }
    }
    
  • 在方法静态调用之前使用static块初始化驱动程序(调用速度更快,但问题是您无法决定使用哪个驱动程序实现)

    public class Jobs {
    
        static WebDriver driver;
    
        static {
           this.driver = new FirefoxDriver(); // just an example
        }
    
        public static void con() throws InterruptedException {
            List<WebElement> element = driver.findElements(By.cssSelector(".position_title.ng-binding"));
            for (int i = 0; i < element.size(); i++) {
                Thread.sleep(2000);
                String u = element.get(i).getText();
                if (u.contains("Java"));
                System.out.println(u);
            }
    }