运行我的测试时出现异常。我在页面工厂使用硒。当我运行下面的代码时,它会打开网站并在下面例外失败。它在我的测试用例中不执行HomePage.ClickbtnCookieWarning()
。在页面工厂运行我的测试时出现NullPointerException
有人可以帮我理解为什么我的代码不工作吗?
失败配置:在 org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement(DefaultElementLocator.java:69)@BeforeTest的SetUp显示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");
}
LoginLink为空。关键是弄清楚为什么没有初始化。也许@FindBy失败了。 –
你需要在'PageFactory.initElements'之前初始化webdriver,因为'driver = new FirefoxDriver(); HomePage HomePage = PageFactory.initElements(driver,HomePage.class); login loginpage = PageFactory.initElements(driver,login.class);' –
谢谢。你能否给我更多的细节?任何想法为什么@FindBy失败?你有什么建议改变我的代码? – Prasa