我无法将驱动程序/对象传递给下一个类/页面,并且在第一个/开始类中具有相同的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()-失败(NullPointerException)
和changeCurrency()通过。我不知道为什么如果这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”声明。
关于java - 将驱动程序/对象传递给其他页面/类-java.lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35103597/