当前位置: 首页 > 知识库问答 >
问题:

传递驱动程序/对象到其他页面/类-java.lang.NullPointerExc0019

晏经武
2023-03-14

我无法将驱动程序/对象传递到下一个类/页,并且在第一个/开始类中具有相同的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.当我运行测试检查IsHomePage()-FAILS(NullPointerExcema)和ChangeMoney cy()PASS。我不知道为什么第一次测试是失败的,如果这两个方法在同一个PageObiect类-主页。什么是错的?

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

---------------------------------------更新------------------好的,我找到了它不起作用的原因。它是因为基类(BasePage)。我做到了,并用PageObjest、构造函数和超级(驱动程序)扩展了所有类。当我删除PageObject类中的“extends”和“super”并使用(this.driver=driver)时,它现在可以工作了。但是我用这个基类做了什么,它不起作用??

---------------------------------------------更新-----------------我的基本页面现在很差:

public class BasePage {
 WebDriver driver;
 public BasePage(WebDriver driver){
        this.driver=driver;
 }

}

共有1个答案

查宜修
2023-03-14

基本的问题是,HomePage显然是为了服从于BasePage(尽管您也在代码片段中称之为Main Page):它的构造函数将WebDriver实例传递给Super(),然而它有自己的WebDriver驱动程序成员变量,该变量永远不会设置,当调用isHomePage()时,该变量将为空。相反,您应该使用父类中的WebDriver实例,并从子类中删除掩蔽声明。

 类似资料:
  • 我在类Sample中初始化了一个驱动程序对象,我也想将该驱动程序对象传递给其他类,但我得到了一个空指针异常。我的代码是 示例类 桑普莱克拉松 Testng xml文件

  • 我正在使用PageObjects在Selenium Webdriver中制作一个测试套件,但我怀疑,即使驱动程序指向不同的框架,WebElement引用的实例是否可以工作?我为之编写测试的网站有很多框架(不,我不能停止使用框架:-),每个网站上的一个框架元素是一个顶栏。我想为这个框架创建一个页面对象,我可以从包含它的其他页面对象中初始化和使用它。 但我怀疑阉羊你可以使用WebElements当驱动

  • 我已经使用页面对象模型创建了一个Java /Appium/Cucumber项目。 我有一个基本能力类,它为我创建了一个驱动程序: 我有一些页面对象类: 如果我使用Junit创建一个简单的单元测试,测试运行良好: 公共类测试步骤{ } 然而,我完全不知道如何在cucumber的“步骤”胶水代码中实现这些。例如,如果我有一个给定的/当/然后,我不能初始化我的页面对象,因为我需要通过我的驱动程序,但是当

  • 我有一张桌子 当我删除的时候,我一直得到 注意:我连接到一个特定的数据库驱动程序,其表名为 我不知道为什么我不能删除这个: 我做错什么了吗? 如果我把$baby挖出来,我好像就会得到它

  • Navicat 还能让你管理其他 SQLite 对象:索引和触发器。在主窗口的主工具栏点击相应的按钮来打开对象列表。

  • Navicat 还能让你管理其他 SQL Server 对象:索引、同义词、触发器、备份设备、链接服务器、服务器触发器、程序集、数据库触发器、分区函数和分区方案。在主窗口中,点击 “其他”,然后选择一个对象来打开对象列表。