2016-12-19 12 views
0

2つのテストケースでテストスイートを実行しようとしたときに、NullPointerExceptionの問題に直面しています。ただし、テストケースを個別に実行すると、テストケースは正常に実行されます。以下はBaseSetupクラスです。Selenium - Eclipse:NullPointerExceptionがテストスイートを実行しているとき

public class BaseSetup { 
    private WebDriver driver; 

    public WebDriver getDriver() { 
     return driver; 
    }  

    private void setDriver(String browserType, String appURL) { 
     switch (browserType) { 
     case "chrome": 
      driver = initChromeDriver(appURL); 
      break; 
     case "firefox": 
      driver = initFirefoxDriver(appURL); 
      break;  
    } 

    private static WebDriver initChromeDriver(String appURL) { 
     ... 
    } 

    private static WebDriver initFirefoxDriver(String appURL) { 

     WebDriver driver = new FirefoxDriver(); 
     driver.navigate().to(appURL); 
     return driver; 
    } 

    @Parameters({ "browserType", "appURL" }) 
    @BeforeSuite 
    public void initializeTestBaseSetup(String browserType, String appURL) { 
     try { 
      setDriver(browserType, appURL); 

     } catch (Exception e) { 
      System.out.println("Error....." + e.getStackTrace()); 
     } 
    } 

    @AfterTest 
    public void tearDown() {} 

これはLoginPageクラス(ページの要素)である

public class LoginPage { 

//web elements of login page 
protected WebDriver driver; 
private By txtUsername = By.xpath(".//*[@id='email']"); 
private By txtPassword = By.xpath(".//*[@id='pass']"); 
private By btnlogin = By.xpath(".//*[@id='loginbutton']"); 
private String lblError = null; 

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

//verify using incorrect password 

//enter username into username textbox 
public void enterUsername (String username){ 
    WebElement txtname = driver.findElement(txtUsername); 
    if (txtname.isDisplayed()) 
    { 
     txtname.sendKeys(username); 
    } 
} 

//enter password into password textbox 
public void enterPassword (String password){ 
    WebElement txtpw = driver.findElement(txtPassword); 
    if (txtpw.isDisplayed()) 
    { 
     txtpw.sendKeys(password); 
    } 
} 

public void clickOnLoginBtn(){  
} 

これはLoginPageTestクラスです。

public class LoginPageTest extends BaseSetup { 

private WebDriver driver; 
private LoginPage loginPage; 

@Test 
public void verifyLoginFunction() { 

    loginPage = new LoginPage(driver);  
    loginPage.enterUsername("abcdef"); //log trace the error here 
    loginPage.enterPassword("abcdef"); 
    loginPage.clickOnLoginBtn(); 

} 
@BeforeClass 
public void Setup() { 
    driver=getDriver(); 
} 
} 

これはVerifyErrorMessageクラス(第2ケース)

private WebDriver driver; 
    private LoginPage loginPage; 

    @Test 
    public void verifyLoginMessage() {   
     loginPage = new LoginPage(driver);     
     loginPage.enterUsername("abc"); 
     loginPage.clickOnLoginBtn();   
     String errorMsg = loginPage.getErrorMessage(); 
     System.out.println(errorMsg); 
    } 


    @BeforeClass 
    public void Setup() { 
     driver=getDriver();  
    } 
} 

これは、エラーがTestNGのです。

java.lang.NullPointerException 
    at com.facebook.objects.LoginPage.enterUsername(LoginPage.java:56) 
    at com.facebook.tests.LoginPageTest.verifyLoginFunction(LoginPageTest.java:28) 
... Removed 25 stack frames 

だから私は、その後、LoginPageTest後に、最初のVerifyErrorMessageを走りました。エラートレースは上記のブロックコードのコメントにあります。

ありがとうございました。

答えて

0

この行のコード行はNullReferenceExceptionですか?

WebElement txtname = driver.findElement(txtUsername); 

もしそうなら、それはnulldriver変数です。ですから、これを修正するにはコード内でトレースする必要があります。その場所はnullになります。

私は、最初のテストでは正常に動作するbeforeSuiteでのみドライバを初期化していますが、2回目のテストではドライバを取得するときにnullを取得するということが考えられます。私はあなたのティアダウン方法(@AfterTest)が何をしているかわからないので、確認するのは難しいですが、ドライバをnullに設定していると思いますか?

@BeforeTest@BeforeSuiteを変更してみてください、それは問題を修正かどうかを確認:

@Parameters({ "browserType", "appURL" }) 
@BeforeSuite 
public void initializeTestBaseSetup(String browserType, String appURL) { 
    try { 
     setDriver(browserType, appURL); 

    } catch (Exception e) { 
     System.out.println("Error....." + e.getStackTrace()); 
    } 
} 

それとも...あなたが実際に@AfterTest注釈とティアダウン方式ではnullにドライバを設定している場合、あなたはそれを変更する必要があります代わりに@AfterSuiteにしてください。

関連する問題