2016-09-14 2 views
0

Я получаю исключение, когда запускаю свой тест. Я использую селен с фабрикой страниц. Когда я запустил следующий код, он откроет сайт и завершит сбой с исключением ниже. он не выполняет HomePage.ClickbtnCookieWarning() в моем тестовом примере.NullPointerException при запуске моего теста с фабрикой страниц

Может кто-то, пожалуйста, помогите мне понять, почему мой код не работает?

FAILED КОНФИГУРАЦИИ: @BeforeTest SetUp java.lang.NullPointerException на org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement (DefaultElementLocator.java:69) на org.openqa.selenium.support .pagefactory.internal.LocatingElementHandler.invoke (LocatingElementHandler.java:38) на com.sun.proxy. $ Proxy5.click (Unknown Source) в 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

вам нужно инициализировать webdriver перед 'PageFactory.initElements'..as' driver = new FirefoxDriver(); HomePage HomePage = PageFactory.initElements (driver, HomePage.class); Login loginpage = PageFactory.initElements (driver, login.class); ' –

+0

Спасибо. Не могли бы вы дать мне более подробную информацию? Любая идея, почему @FindBy не удалось? Вы предлагаете что-либо изменить в моем коде? – Prasa

ответ

0

Вы получаете NullPointerException, потому что вы используете WebDriver экземпляр Перед инициализацией.

Вам необходимо инициализировать WebDriver перед использованием этого экземпляра, как: -

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

Если вы хотите использовать в качестве WebDriversingleton который возвращает один экземпляр для всех методов тестирования вы можете follow this answer which is exactly you want.

0

Проблема в каждом классе создается новый экземпляр драйвера. Вам просто нужно создать один экземпляр драйвера в базовом классе, где вы выполняете настройку своего браузера. Пожалуйста, обратитесь к странице Object Model. После создания экземпляра драйвера вам необходимо использовать его во всех ваших классах. Или иначе это вызовет исключение NullPointerException, потому что драйвер не будет иметь никакой ссылки.

Смежные вопросы