2017-07-05 31 views
0

當我運行@testCase時出現NullPointerException異常
1.在FrameworkTestCases.class - > @BeforeClass中,初始化所選webdriver的實例。當我作爲jUnit測試啓動FrameworkTestCases.class時,瀏覽器正在運行,但是當我到達testCase時,它說NullPointerException。是什麼原因?我還使用了一個帶有2個參數的構造函數來將驅動從Generic.class繼承到LoginPageFactory.class,但沒有發生任何事情。WebDriver無法初始化

這裏是我FrameworkTestCases類:

public class FrameworkTestCases { 

static WebDriver driver; 
private static String baseURl = "https://management.tacticlicks.com/"; 
static LoginPageFactory loginPage; 
static Generic generic; 
//WebDriver driver; 
//static LoginPageFactory lpFactory; 


@BeforeClass 
public static void setUp() {   
    generic = new Generic(driver); 
    generic.getDriver(baseURl, "chrome"); 
} 

@Test 
public void test() { 
    System.out.println("Executing test"); 

    loginPage 
    .fillUsernameField("[email protected]") 
    .fillPasswordField("astral8909") 
    .clickSubmit(); 
} 


@AfterClass 
public static void tearDown() { 
    driver.quit(); 
} 
} 

public class LoginPageFactory extends Generic { 

public LoginPageFactory(WebDriver driver2, Class<LoginPageFactory> class1) { 
    super(driver2, class1); 
    // TODO Auto-generated constructor stub 
} 

WebDriver driver; 

@FindBy(name="email") //.//*[@id='login']/div[1]/div/div/table/tbody/tr/td[2]/div[1]/form/div[1]/input 
WebElement loginUsernameField; 

@FindBy(name="password") 
WebElement loginPasswordField; 

@FindBy(tagName="button") 
WebElement loginSubmitButton; 

public LoginPageFactory(WebDriver driver) { 
    System.out.println("LoginPageFactory"); 
    this.driver = driver; 
    PageFactory.initElements(driver, this); 
} 

public LoginPageFactory fillUsernameField(String username) { 
    System.out.println("Before field initializing"); 
    WebElement emailField = driver.findElement(By.name("email")); 
    emailField.click(); 
    emailField.sendKeys(username); 
    return this; 
} 

public LoginPageFactory fillPasswordField(String password) { 
    loginPasswordField.click(); 
    loginPasswordField.clear(); 
    loginPasswordField.sendKeys(password); 
    return this; 
} 

public LoginPageFactory clickSubmit() { 
    loginSubmitButton.click(); 
    return this; 
} 
} 

public class Generic { 

WebDriver driver; 

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

public Generic(WebDriver driver2, Class<LoginPageFactory> class1) { 
    // TODO Auto-generated constructor stub 
} 

private void getBrowser(String browser) { 

    if (browser.equalsIgnoreCase("Firefox")) { 
     File chromeDriver = new File("C:\\Users\\Ivo\\Desktop\\geckodriver.exe"); 
     System.setProperty("webdriver.gecko.driver", chromeDriver.getAbsolutePath()); 
     driver = new FirefoxDriver(); 
    } else if (browser.equalsIgnoreCase("Chrome")) { 

     //set chromedriver property 
     File chromeDriver = new File("C:\\Users\\Ivo\\Desktop\\chromedriver.exe"); 
     System.setProperty("webdriver.chrome.driver", chromeDriver.getAbsolutePath()); 
     driver = new ChromeDriver(); 


    } else { 
     System.out.println("Browser cannot be launched"); 
    } 

} 

public WebDriver getDriver(String appUrl, String browser) { 
    getBrowser(browser); 
    driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 
    driver.manage().window().maximize(); 
    driver.get(appUrl); 
    return driver; 
} 
} 
+1

的可能的複製[避免!= NULL語句(https://stackoverflow.com/questions/271526/avoiding-null-statements) – DebanjanB

回答

0

你缺少在@BeforeClass方法的變量賦值。

變化

@BeforeClass 
public static void setUp() {   
    generic = new Generic(driver); 
    generic.getDriver(baseURl, "chrome"); 
} 

@BeforeClass 
public static void setUp() {   
    generic = new Generic(driver); 
    driver = generic.getDriver(baseURl, "chrome"); 
} 

,你也沒有創造LoginPageFactory類的任何實例。你已經創建了一個變量static LoginPageFactory loginPage;但是沒有初始化它(至少在提供的代碼中沒有)。 在方法

@Test 
public void test() { 
    System.out.println("Executing test"); 

    //add this line of code to initialize elements via Page Factory 
    loginPage = new LoginPageFactory(driver); 

    loginPage 
    .fillUsernameField("[email protected]") 
    .fillPasswordField("astral8909") 
    .clickSubmit(); 
} 
+0

哦,非常感謝。現在它正在工作。我爲你的答案投票,但我的名聲很低。 – ils

+0

你可以接受我的回答,而不是提高它。在這種情況下,我們都贏得聲望點。 你可以在這裏閱讀它:https://stackoverflow.com/help/someone-answers –