2015-09-10 33 views
0

我是新來的硒,我在我的代碼中面臨這個空指針異常, 這是我的一個頁面對象(Login Page)。Selenium WebDriver POM處理複合類

package Pages; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.support.ui.ExpectedConditions; 
import org.openqa.selenium.support.ui.WebDriverWait; 

import Lib.lib; 

public class LoginPage extends lib{ 

    WebDriver driver; 
    By loginLink = By.xpath("/html/body/nav/div/a[7]"); 
    By emailInput = By.name("email"); 
    By passwordInput = By.name("password"); 
    By signInBtn = By.className("btn btn-primary btn-lg"); 

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

    public void redirectToLogin() 
    { 
     driver.findElement(loginLink).click(); 
     new WebDriverWait(driver, 30).until(ExpectedConditions.visibilityOfElementLocated(emailInput)); 
    } 

    public void enterEmail(String email) 
    { 
     driver.findElement(emailInput).sendKeys(email); 
    } 

    public void enterPW(String password) 
    { 
     driver.findElement(passwordInput).sendKeys(password); 
    } 

    public void clickOnSignIn() throws Exception 
    { 
     driver.findElement(signInBtn).click(); 
     Thread.sleep(3000); 
    } 

    public void loginToKB(String userEmail, String userPW) throws Exception 
    { 
     this.redirectToLogin(); 

     this.enterEmail(userEmail); 

     this.enterPW(userPW); 

     this.clickOnSignIn(); 
    } 

} 

這是我的測試案例代碼

package TestCases; 

import org.testng.annotations.Test; 

import Lib.lib; 
import Pages.LoginPage; 

public class logging_in extends lib { 
    LoginPage memLogin = new LoginPage(driver); 

    @Test 
    public void user_login() throws Exception 
    { 

     memLogin.loginToKB("[email protected]", "uziii"); 

    } 

} 

我從LIB類,這是繼進口鉻驅動程序配置,

package Lib; 

import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver; 
import org.openqa.selenium.chrome.ChromeOptions; 
import org.testng.annotations.BeforeTest; 
import org.testng.annotations.AfterTest; 

public class lib { 

    protected static WebDriver driver = null; 

    @BeforeTest 
    public void chrome_extension() 
    { 
     System.setProperty("webdriver.chrome.driver", "chromedriver.exe"); 
     ChromeOptions options = new ChromeOptions(); 
     options.addArguments("--start-maximized"); 
     driver = new ChromeDriver(options); 
     driver.get("http://www.testsite.com"); 
    } 


    @AfterTest 
    public void quit() 
    { 
     driver.quit(); 
    } 

} 

當我運行我的測試案例(logging_in),我最初重定向到網站頁面,但之後,它停止執行,並給我複合類錯誤。

錯誤似乎指出對這個,

通過signInBtn = By.className( 「BTN BTN-初級BTN-LG」);

請讓我知道,如何處理複合類。任何幫助/反饋將不勝感激。謝謝。

+1

你已經聲明webdriver驅動程序實例在類lib中是私有的,然後你再次在類LoginPage中聲明webdriver驅動實例是不正確的。 –

+0

@RupeshShinde非常感謝,解決了。你能讓我知道如何處理複合類名稱。我正在一個錯誤 org.openqa.selenium.InvalidSelectorException:無效選擇:化合物類名不允許 這似乎是這一個, 通過signInBtn = By.className(「BTN BTN-初級BTN-LG」) ; 任何想法如何處理這些? – Uziii

+0

@Uziii請注意,如果你想改變這個問題,然後編輯你的原始請求,否則你將被標記爲以不正確的方式提問 –

回答

0
  1. 您正在向LoginPage(Webdriver驅動程序)構造函數傳遞未初始化的靜態驅動程序實例。您需要在lib中的靜態塊中或在logging_in頁面中初始化memLogin變量之前初始化驅動器。
  2. 對於複合類,您將不得不使用XPath。如果你可以向我們展示你的DOM的html代碼片段,我們應該能夠告訴你相關的XPath。
0

您已經聲明網絡驅動器的驅動程序實例作爲IIb類是正確的,那麼傻冒再次宣佈網絡驅動器的驅動程序類LoginPage這是不正確的實例私人

刪除第二個聲明以避免空指針異常。