![](/img/trans.png)
[英]java.lang.NullPointerException error On Page Object Model
[英]Passing driver/object to other page/class - java.lang.NullPointerException
我无法将驱动程序/对象传递给下一个类/页面,并且在第一个/开始类中具有相同的NullPointerException。
PageObject类-SearchResultsPage:
public class SearchResultsPage extends BasePage{
@FindBy(xpath = "//*[@data-original-title=\"Compare this Product\"]")
List <WebElement> compareButton;
@FindBy(partialLinkText = "Product Compare")
WebElement urlComparePage;
public SearchResultsPage(WebDriver driver) {
super(driver);
PageFactory.initElements(driver, this);
}
public void compareItems(){
for(WebElement compareButtons: compareButton){
compareButtons.click();
}
}
public void goToComparePage(){
urlComparePage.click();
}
}
PageObject类的HomePage:
public class HomePage extends BasePage{
public HomePage(WebDriver driver) {
super(driver);
PageFactory.initElements(driver, this);
}
public String PAGE_TITLE = "Your Store";
WebDriver driver;
@FindBy(className = "input-lg")
WebElement inputSearch;
@FindBy(className = "btn-lg")
WebElement searchButton;
public void isHomePage(){
String pageTitle = driver.getTitle();
Assert.assertEquals(pageTitle, PAGE_TITLE);
}
public void inputIntoSearch(){
String itemName = "ipod";
inputSearch.sendKeys(itemName);
}
public SearchResultsPage clickSearchButton(){
searchButton.click();
return PageFactory.initElements(driver, SearchResultsPage.class);
}
}
测试类别:
public class MainPage {
HomePage hp;
TopNavigation topNav;
ComparePage cp;
SearchResultsPage srp;
@BeforeTest
public void setUp(){
WebDriver driver = new FirefoxDriver();
driver.get("http://demo.opencart.com/");
driver.manage().window().maximize();
hp = PageFactory.initElements(driver, HomePage.class);
topNav = PageFactory.initElements(driver, TopNavigation.class);
cp = PageFactory.initElements(driver, ComparePage.class);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}
@Test(priority = 0)
public void checkIsHomePage(){
hp.isHomePage();
}
@Test
public void changeCurrency(){
topNav.clickButtonChangeCurrency();
topNav.setCurrency();
}
@Test
public void searchProducts(){
hp.inputIntoSearch();
hp.clickSearchButton();
}
@Test
public void addToCompare(){
srp.compareItems();
}
}
我有两个问题:
1.当我运行测试checkIsHomePage()-FAILS(NullPointerException)和changeCurrency()PASS。 我不知道为什么如果这2个方法在同一PageObiect类-HomePage中,则第一个测试失败。 怎么了?
2.当searchProduct方法通过时,我想使用addToCompare()比较产品,但是我不知道如何使用PageFactory.initelements在带有搜索结果的页面上进行测试。 我应该怎么做?
- - - - - - - - - - - - - - - - - - - -更新 - - - - - ------------------好的,我怀疑它为什么不起作用的原因。 因为它是基类(BasePage)。 我做到了,并使用PageObjest以及构造函数和super(driver)扩展了所有类。 当我删除PageObject类中的“ extends”和“ super”并使用(this.driver = driver)时,它现在正在工作。 但是我用这个基类做了些什么呢?
- - - - - - - - - - - - - - - - - - - - - - -更新 - - ---------------------------我的BasePage现在很差:
public class BasePage {
WebDriver driver;
public BasePage(WebDriver driver){
this.driver=driver;
}
}
根本的问题是HomePage
显然是要BasePage
(尽管您在代码段中也将其称为MainPage
):其构造函数将WebDriver
实例传递给super(),但是它具有自己的WebDriver driver
成员变量,从未设置,并且在isHomePage()
时为null。 相反,您应该使用父类中的WebDriver
实例,并从子类中删除“ masking”声明。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.