1

Я следую учебнику для Selenium - Framework с ключевыми словами here. Я не очень хорошо знаком с API Reflection. (Я тоже начинаю с Java)Исключение Null Pointer при использовании Reflection

Когда я выполняю свой основной класс, я получаю исключение Null Pointer Exception. Я не уверен, что я делаю неправильно. Может быть, глупая ошибка. Пожалуйста, помогите мне понять, что мне здесь не хватает. (Кроме того, если кто-то может направить меня, где я могу узнать больше о ключевых слов Driven Framework и Reflection API с точки зрения новичка, это было бы очень полезно.)

DriverScript:

package testdev; 

import java.lang.reflect.Method; 
import config.ActionKeywords; 
import utility.ExcelUtils; 

public class DriverScript { 

public static ActionKeywords actionKeywords; 
public static String sActionKeyword; 
public static Method method[]; 

public DriverScript() throws NoSuchMethodException, SecurityException{ 
    actionKeywords = new ActionKeywords(); 
    method = actionKeywords.getClass().getMethods(); 
} 

public static void main(String args[]) throws Exception{ 

    String sPath = "C://Users//testusr//workspace//src//datasource//datasource.xlsx"; 
    ExcelUtils.setExcelFile(sPath, "sheet"); 

    for(int i=1; i<=7; i++){ 
     sActionKeyword = ExcelUtils.getCellData(i, 3); 
     execute_Actions(); 
    } 
} 

private static void execute_Actions() throws Exception{ 

    for(int j=0;j < method.length;j++){ 
     if(method[j].getName().equals(sActionKeyword)){ 
      method[j].invoke(actionKeywords); 
      break; 
     } 
    } 

} 
} 

ActionKeywords:

package config; 

import java.util.concurrent.TimeUnit; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver; 

public class ActionKeywords { 

public static WebDriver driver; 

public static void openbrowser(){ 
    System.setProperty("webdriver.chrome.driver", "G:\\Ram\\MAC\\Se\\chromedriver.exe"); 
    driver = new ChromeDriver(); 
} 

public static void navigate(){ 
    driver.get("https://jira-dev.emdeon.net/secure/Dashboard.jspa"); 
    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); 
    driver.manage().window().maximize(); 
} 

public static void enter_credentials(){ 
    driver.findElement(By.id("login-form-username")).sendKeys("RMuruganandam"); 
    driver.findElement(By.id("login-form-password")).sendKeys("[email protected]"); 
} 

public static void click_login(){ 
    driver.findElement(By.id("login")).click(); 
} 

public static void wait_for(){ 
    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); 
} 

public static void click_logout() throws InterruptedException{ 
    driver.findElement(By.id("header-details-user-fullname")).click(); 
    Thread.sleep(30); 
    driver.findElement(By.id("log_out")).click(); 
} 

public static void closebrowser(){ 
    driver.quit(); 
} 

} 

ExcelUtils:

package utility; 

import java.io.FileInputStream; 
import org.apache.poi.xssf.usermodel.XSSFCell; 
import org.apache.poi.xssf.usermodel.XSSFSheet; 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

public class ExcelUtils { 

public static XSSFWorkbook ExcelWBook; 
public static XSSFSheet ExcelWSheet; 
public static XSSFCell Cell; 
public static FileInputStream ExcelFile; 

public static void setExcelFile (String Path, String SheetName) throws Exception{ 
    FileInputStream ExcelFile = new FileInputStream(Path); 
    ExcelWBook = new XSSFWorkbook(ExcelFile); 
    ExcelWSheet = ExcelWBook.getSheetAt(0); 
} 

public static String getCellData (int rowNum, int colNum) { 
    String CellData =""; 
    Cell = ExcelWSheet.getRow(rowNum).getCell(colNum); 
    CellData= Cell.getStringCellValue();   
    return CellData; 
} 
} 

Исключение:

java.lang.NullPointerException 
at testdev.DriverScript.execute_Actions(DriverScript.java:37) 
at testdev.DriverScript.main(DriverScript.java:28) 

Excel лист:

datasource.xlsx

+0

Пожалуйста, прикрепите StackTrace – Alexey

+0

Где вы получите исключение? – Guy

ответ

1

Как было сказано об исключении: В строке 37;

for (int j = 0; j < method.length; j++) { 

method - null. Потому что вы никогда не вызывать конструктор для создания нового объекта Driverscript и так

method = actionKeywords.getClass().getMethods(); 

линия никогда не присвоить значение method.

Все поля: static, но вы пытаетесь присвоить их значения в Constructor.

Это не хороший подход, но я думаю, что выше код работает, как ожидалось для вас

public static void main(String args[]) throws Exception{ 

    String sPath = "C://Users//testusr//workspace//src//datasource//datasource.xlsx"; 
    ExcelUtils.setExcelFile(sPath, "sheet"); 

    for(int i=1; i<=7; i++){ 
     sActionKeyword = ExcelUtils.getCellData(i, 3); 
     actionKeywords = new ActionKeywords(); 
     method = actionKeywords.getClass().getMethods(); 
     execute_Actions(); 
    } 
} 
Смежные вопросы