【发布时间】:2016-09-14 14:42:08
【问题描述】:
我在运行测试时遇到异常。我正在将硒与页面工厂一起使用。当我运行以下代码时,它将打开网站并失败并出现以下异常。在我的测试用例中它没有执行HomePage.ClickbtnCookieWarning()。
谁能帮我理解为什么我的代码不起作用?
配置失败:@BeforeTest 设置 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(未知来源) 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("aa@yahoo.com", "125", "Test");
}
【问题讨论】:
-
LoginLink 为空。关键是要弄清楚为什么它没有被初始化。也许@FindBy 失败了。
-
你需要在
PageFactory.initElements..asdriver = new FirefoxDriver();HomePage HomePage= PageFactory.initElements(driver, HomePage.class); login loginpage =PageFactory.initElements(driver, login.class);之前初始化webdriver -
谢谢。你能给我更多的细节吗?知道为什么@FindBy 失败了吗?您对我的代码有什么建议吗?
-
Saurabh Gaur:谢谢。它正在工作。如果我在同一个类中有另一个方法,例如:在我的测试用例中,我在 @Test 下有另一个方法,我需要使用 HomePage 类和登录页面类中的元素。我需要在该方法中再次使用 PageFactory.initElements 吗?有没有办法让类中的所有方法都公开以下几行? HomePage HomePage= PageFactory.initElements(driver, HomePage.class); login loginpage =PageFactory.initElements(driver, login.class);