gpt4 book ai didi

java - 将驱动程序/对象传递给其他页面/类 - java.lang.NullPointerException

转载 作者:行者123 更新时间:2023-11-28 21:27:38 25 4
gpt4 key购买 nike

我无法将驱动程序/对象传递给下一个类/页面,并且在第一个/开始类中有相同的 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();
}
}

我有两个问题:

1.当我运行测试 checkIsHomePage() - 失败(NullPointerException)和 changeCurrency() 通过。如果这 2 个方法在同一个 PageObiect 类 - HomePage 中,我不知道为什么第一次测试失败。怎么了?

2.当 searchProduct 方法通过时,我想使用 addToCompare() 比较产品,但我不知道如何使用 PageFactory.initelements 来对搜索结果页面进行测试。我应该怎么做?

------------------------------------更新------ ----------------------好的,我找到了它不起作用的原因。它是因为基类 (BasePage)。我做到了,并使用 PageObjest、构造函数和 super (驱动程序)扩展了所有类。当我删除 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( ) 被调用。您应该改为使用父类中的 WebDriver 实例,并删除子类中的“屏蔽”声明。

关于java - 将驱动程序/对象传递给其他页面/类 - java.lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35103597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com