2016-09-14 7 views
0

Ich erhalte eine Ausnahme, wenn ich meinen Test ausführe. Ich verwende Selen mit der Seitenfabrik. Wenn ich den folgenden Code starte, öffnet er die Webseite und scheitert mit Ausnahme unten. es führt die HomePage.ClickbtnCookieWarning() in meinem Testfall nicht durch.NullPointerException bei der Ausführung meines Tests mit der Seiten-Factory

Kann mir bitte jemand helfen zu verstehen, warum mein Code nicht funktioniert?

FAILED CONFIGURATION: @BeforeTest SetUp java.lang.NullPointerException bei org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement (DefaultElementLocator.java:69) bei org.openqa.selenium.support .pagefactory.internal.LocatingElementHandler.invoke (LocatingElementHandler.java:38) bei com.sun.proxy. $ Proxy5.click (Unknown Source) bei pageObjects.HomePage.ClickLoginLink (HomePage.java:57) bei myaccountsuite.TC1DefaultDeliveryAddDisplay .SetUp (TC1DefaultDeliveryAddDisplay.java:29)

Homepage Seite Objekt

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(); 
    } 
} 

Login-Seite Objekt

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(); 
    }  
} 

My Test

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 ist null. Der Schlüssel ist herauszufinden, warum es nicht initialisiert wurde. Vielleicht ist @FindBy fehlgeschlagen. –

+0

Sie müssen den Webdriver initialisieren, bevor 'PageFactory.initElements'..as' driver = new FirefoxDriver(); HomePage HomePage = PageFactory.initElements (driver, HomePage.class); login loginpage = PageFactory.initElements (Treiber, login.class); ' –

+0

Danke. Könnten Sie mir bitte mehr Details geben? Irgendeine Idee warum @FindBy fehlgeschlagen ist? Schlägst du irgendwas vor, um meinen Code zu ändern? – Prasa

Antwort

0

Sie bekommen NullPointerException weil Sie verwenden WebDriver Instanz vor der Initialisierung.

Sie müssen WebDriver initialisieren, bevor Sie dieses Beispiel als: -

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

Wenn Sie WebDriver als singleton verwenden möchten, die Sie follow this answer which is exactly you want können einzelne Instanz für alle Ihre Testmethoden gibt.

0

Das Problem liegt in jeder Klasse, die Sie neue Instanz des Treibers erstellen. Sie müssen nur eine Treiberinstanz in Ihrer Basisklasse erstellen, in der Sie die Einrichtung Ihres Browsers vornehmen. Bitte beziehen Sie sich auf das Seitenobjektmodell. Sobald die Treiberinstanz erstellt wurde, müssen Sie sie in allen Ihren Klassen verwenden. Andernfalls wird NullPointerException ausgelöst, da der Treiber keine Referenz enthält.

Verwandte Themen