2016-09-14 18 views
0

テストを実行すると例外が発生します。私はページ工場でセレンを使用しています。次のコードを実行すると、Webサイトが開き、以下の例外が発生します。私のテストケースではHomePage.ClickbtnCookieWarning()を実行しません。ページファクトリでテストを実行しているときにNullPointerExceptionが発生する

誰かが私のコードが機能していない理由を理解できたら助けてくれますか?

失敗したコンフィギュレーション: org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement(DefaultElementLocator.java:69)で@BeforeTestセットアップjava.lang.NullPointerExceptionが org.openqa.selenium.supportで.Pagefactory.internal.LocatingElementHandler.invoke(LocatingElementHandler.java:38) com.sun.proxy。$ Proxy5.click(不明なソース) pageObjects.HomePage.ClickLoginLink(HomePage.java:57) myaccountsuite.TC1DefaultDeliveryAddDisplay .SetUp(TC1DefaultDeliveryAddDisplay.java:29)

ホームページページオブジェクト

public class HomePage { 

    WebDriver driver; 

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

    @FindBy(id="ctl00_header_hdrCookieWarning_btnHideCookieWarning") 
    WebElement btnCookieWarning; 

    @FindBy(xpath=".//*@id='ctl00_masterContainerTop_Block_637_LoginView1_ulAnonymous']/li[2]/a") 
    WebElement LoginLink; 

    public void ClickbtnCookieWarning() 
    { 
     btnCookieWarning.click(); 
    } 

    public void ClickLoginLink() 
    { 
     LoginLink.click(); 
    } 
} 

ログインページオブジェクト

public class login { 

    WebDriver driver; 

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

    @FindBy(id="ctl00_ContentPlaceHolderMain_container_container_Block_166_lgn1_UserName") 
    WebElement UserName; 

    @FindBy(id="ctl00_ContentPlaceHolderMain_container_container_Block_166_lgn1_Password") 
    WebElement Password; 

    @FindBy(id="ctl00_ContentPlaceHolderMain_container_container_Block_166_lgn1_LoginButton") 
    WebElement btn_LogIn; 

    @FindBy(id="ctl00_ContentPlaceHolderMain_container_container_Block_166_lgn1_txtAccount") 
    WebElement Account; 

    @FindBy(id="ctl00_ContentPlaceHolderMain_container_container_Block_166_lgn1_btnHomeBranch_3") 
    WebElement btn_Continue; 

    public void userLogin(String uname, String pass, String acc) 
    { 
     UserName.sendKeys(uname); 
     Password.sendKeys(pass); 
     btn_LogIn.click(); 
     driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); 
     Account.sendKeys(acc); 
     btn_LogIn.click(); 
     btn_Continue.click(); 
    }  
} 

私のテスト

public class TC1DefaultDeliveryAddDisplay { 
    public WebDriver driver; 

    @BeforeTest(alwaysRun = true) 
    public void SetUp() { 

     HomePage HomePage = PageFactory.initElements(driver, HomePage.class); 
     login loginpage = PageFactory.initElements(driver, login.class); 

     driver = new FirefoxDriver(); 
     driver.get("http://URL/"); 
     HomePage.ClickbtnCookieWarning(); 
     HomePage.ClickLoginLink(); 
     loginpage.userLogin("[email protected]", "125", "Test"); 

    } 
+0

LoginLinkがnullです。重要な点は、初期化されなかった理由を理解することです。たぶん@FindByが失敗しました。 –

+0

'PageFactory.initElements'..as' driver = new FirefoxDriver(); HomePage HomePage = PageFactory.initElements(driver、HomePage.class);の前にwebdriverを初期化する必要があります。 login loginpage = PageFactory.initElements(driver、login.class); ' –

+0

ありがとうございます。詳細を教えてください。なぜ@FindByが失敗したのか?私のコードで何か変わることを示唆していますか? – Prasa

答えて

0

あなたが初期化の前にWebDriverインスタンスを使用しているので、あなたはNullPointerExceptionを取得しています。

あなたは、このインスタンスを使用する前に、WebDriverを初期化する必要があります - あなたはあなたができるfollow this answer which is exactly you wantすべてのテストメソッドのための単一のインスタンスを返すsingletonとしてWebDriverを使用したい場合は

driver = new FirefoxDriver(); 
HomePage HomePage = PageFactory.initElements(driver, HomePage.class); 
Login loginpage =PageFactory.initElements(driver, login.class); 

0

問題は、各クラスで新しいインスタンスのドライバを作成することです。ブラウザのセットアップを行う場所に、基本クラスでドライバインスタンスを1つ作成するだけで済みます。ページオブジェクトモデルを参照してください。 Driverインスタンスが作成されたら、すべてのクラスで同じものを使用する必要があります。または、ドライバが参照を持たないため、NullPointerExceptionがスローされます。

関連する問題