我无法将驱动程序/对象传递给下一个类/页面,并且在第一个/开始类中具有相同的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类主页:
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();
}
}
我有2个问题:
1.当我运行测试checkIsHomePage() - FAILS(NullPointerException) 和changeCurrency()通过。我不知道如果这两个方法在同一个PageObiect类 - HomePage中,为什么第一次测试失败。有什么问题?
2.当searchProduct方法通过我想使用addToCompare()比较产品,但我不知道如何使用PageFactory.initelements在页面上进行搜索结果的测试。我该怎么做?
---------------------------------------修订------- --------------------- 好吧,我知道它不起作用的原因。它的基类(BasePage)。我用PageObjest和构造函数和超级(驱动程序)扩展了所有类。当我在PageObject类中删除“extends”和“super”并使用(this.driver = driver)时,它现在正在工作。但是我用这个基类做了什么呢?
--------------------------------------------- UPDATED- ------------------------------ 我的BasePage现在很差:
public class BasePage {
WebDriver driver;
public BasePage(WebDriver driver){
this.driver=driver;
}
}
答案 0 :(得分:1)
根本问题是,HomePage
显然是为了推迟BasePage
(尽管你在代码段中也称它为MainPage
):它的构造函数传递WebDriver
实例到super(),但它有自己的WebDriver driver
成员变量永远不会被设置,并且在调用isHomePage()
时它将为null。您应该使用父类中的WebDriver
实例,并从子类中删除“masking”声明。