【问题标题】:Driver Null pointer exception while using the driver from Test class in Page class [duplicate]使用Page类中Test类的驱动程序时驱动程序空指针异常[重复]
【发布时间】:2021-08-17 18:27:31
【问题描述】:

我有两个类,一个基类和测试类

基类:

public class Base {
    
    public static WebDriver driver;

    public void browser() {

    System.setProperty("webdriver.chrome.driver", 
     "C:\\Users\\admin\\Desktop\\Selenium\\chromedriver.exe");

    driver  = new ChromeDriver();
    
    driver.manage().window().maximize();
    
    }

而且,我正在将我的测试类扩展到基类以使用驱动程序引用,

public class FacebookTestCase extends Base{
    
    
    public static void main(String[] args ) {
            
        driver.get("www.facebook.com"); 

        driver.findElement(By.id("email")).sendKeys("tetst@test.in");

        driver.findElement(By.id("pass")).sendKeys("test");
        driver.findElement(By.name("login")).click();
        
    }

}

但是当我运行 Test 类时出现空指针异常。

线程“main”中的异常 java.lang.NullPointerException 在 grid.practice.FacebookTestCase.main(FacebookTestCase.java:12)

已编辑

我还有一个问题,

现在我将我的测试类和页面类分开,并从我的测试类中调用我的页面类方法。我是 创建页面类的对象并调用方法。但是当我通过 驱动到页面类的构造函数。

测试类:

public class FacebookTestCase extends Base{
    
    
    public static void main(String[] args ) {
            
    driverInitialization();
    FacebookElements fb = new FacebookElements(driver);
    fb.login();
        
        
    }

页面类:

public class FacebookElements{

    WebDriver driver;

    public FacebookElements(WebDriver driver) {
    this.driver = driver;

    }
    
    
    public void login() {

    driver.findElement(By.id("username")).sendKeys("test");
    driver.findElement(By.id("password")).sendKeys("test");
    }

}

【问题讨论】:

    标签: java selenium nullpointerexception selenium-chromedriver pageobjects


    【解决方案1】:

    您没有初始化 driver 对象。
    driver 初始化由Base 类中的browser 方法执行。
    您从未在 FacebookTestCase 类中的可运行 main 方法中调用它。

    【讨论】:

      【解决方案2】:

      因为您没有在主方法中调用该浏览器方法。这么叫

      public static void main(String[] args ) {
          browser():
          driver.get("www.facebook.com"); 
      // Then rest of your code. 
      }
      

      此外,由于 main 是一个静态方法,您根本无法在其中调用浏览器方法。因此,要么将浏览器设为静态,要么创建基类对象并使用浏览器方法。

      【讨论】:

        猜你喜欢
        • 2018-12-07
        • 1970-01-01
        • 1970-01-01
        • 2018-01-13
        • 2016-03-13
        • 2021-06-12
        • 1970-01-01
        相关资源
        最近更新 更多