簡體   English   中英

使用Selenium時收到“線程“ main” java.lang.NullPointerException中的異常”

[英]Receiving “Exception in thread ”main“ java.lang.NullPointerException” when using 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類中調用此方法。 我究竟做錯了什么?

您有一個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); } } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM