java - cucumber Selenium - Java - PageFactory : Step Definition: java. lang.NullPointerException

标签 java selenium-webdriver cucumber config page-factory

社区大家好:我面临着下一个问题:我正在使用 Page Factory 来处理 Cucumber、Selenium WebDriver。此处的错误来自步骤定义端:

java.lang.NullPointerException
at pages.page_First.startNavigation(page_First.java:33)
at stepdefs.stepdefs_First.iGoToGoogle(stepdefs_First.java:20)
at ✽.I go to Google (file:src/test/resources/features/first.feature:10)

这是出现问题的代码部分 (StepDefinition):

@Given("I go to Google")
    public void iGoToGoogle() {

        page_first.startNavigation();
    }

从页面端来看,这是代码:

public class page_First extends BasePage {


    public page_First()  {
        PageFactory.initElements(driver, this);
    }


    ///////////////////////WEB ELEMENTS///////////////////////

    @FindBy(name = "q")
    private WebElement searchText;

    @FindBy(name="btnK")
    private WebElement searchButton;


    //////////////////////BASE METHODS//////////////////////

    public void startNavigation()  {

        driver.get(PropertyManager.getInstance().getURL());
    }

    public void search(String search)  {

        setTextAs(searchText, search);
    }

    public void enterButton (){

        clickElement(searchButton);
    }
}

功能文件:

Scenario Outline: Search google.com to verify google search is working

    Given I go to Google
    When I query for "<search>" cucumber spring selenium
    And click search
    Then google page title should become the first page

    Examples:
    | search            |
    | Cucumber Selenium |

这是我的浏览器类:

    public class Browser {

    // Take the instance of WebDriver
    public static WebDriver driver;

    public WebDriver initializeBrowser() throws IOException {

        //Properties taken from config.properties
        String browser = PropertyManager.getInstance().getBrowser();

        if(browser.equals("chrome")) {
            WebDriverManager.chromedriver().setup();
            driver = new ChromeDriver();

        } else if(browser.equals("firefox")) {
            WebDriverManager.firefoxdriver().setup();
            driver = new FirefoxDriver();

        } else if(browser.equals("ie")) {
            WebDriverManager.iedriver().setup();
            driver = new InternetExplorerDriver();

        } else if(browser.equals("edge")) {
            WebDriverManager.edgedriver().setup();
            driver = new EdgeDriver();

        } else if(browser.equals("opera")) {
            WebDriverManager.operadriver().setup();
            driver = new OperaDriver();

        } else {
            System.setProperty("webdriver.safari.driver","/usr/bin/safaridriver");
            driver = new SafariDriver();
        }
        System.out.println("-----> Proceed to initialize driver <-----");
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        driver.manage().window().maximize();
        return driver;
    }
}

这是我的配置属性读取器类:

public class PropertyManager {

    private static PropertyManager instance;
    private static final Object lock = new Object();
    private static String propertyFilePath = System.getProperty("user.dir") + "//src//main//resources//data//config.properties";

    ///////////////////////////// DATA IN PROPERTIES //////////////////////////

    private static String url;
    private static String browser;

    //Create a Singleton instance. We need only one instance of Property Manager.
    public static PropertyManager getInstance () {
        if (instance == null) {
            synchronized (lock) {
                instance = new PropertyManager();
                instance.loadData();
            }
        }
        return instance;
    }

    //Get all configuration data and assign to related fields.
    private void loadData() {

        //Declare a properties object
        Properties prop = new Properties();

        //Read config.properties file
        try {
            prop.load(new FileInputStream(propertyFilePath));
        } catch (IOException e) {
            System.out.println("Configuration properties file cannot be found");
        }

        //Get properties from config.properties
        url = prop.getProperty("url");
        browser = prop.getProperty("browser");
    }

    public String getURL () {
        return url;
    }

    public String getBrowser () {
        return browser;
    }
}

我忘记了这一点,我的步骤定义类:

    public class stepdefs_First {

    private page_First page_first = PageFactory.initElements(Browser.driver, page_First.class);



    @Given("I go to Google")
    public void iGoToGoogle() {

        page_first.startNavigation();
    }

    @When("I query for {string} cucumber spring selenium")
    public void iQueryForCucumberSpringSelenium(String search) throws Exception {

        page_first.search(search);
    }

    @And("click search")
    public void clickSearch() {

        page_first.enterButton();

    }

    @Then("google page title should become the first page")
    public void googlePageTitleShouldBecomeTheFirstPage() {

        System.out.println("All OK");
    }
}

顺便说一下,这是我的config.properties

browser = firefox
url = https://www.google.cl

拜托,我需要你的帮助。

最佳答案

初始化页面对象类

page_First page_first=new page_First();

关于java - cucumber Selenium - Java - PageFactory : Step Definition: java. lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60606272/

相关文章:

java - 如何在 Java 中将 RSA 公钥转换为 ssh-rsa 公钥?

java - 在 JPanel 上画一条可移动的线

java - Selenium 自动化 - 如何从此列表中选择一个下拉菜单项而不会出现异常错误?

java - Maven 自动删除依赖版本中的尾随零 (javax.servlet-api)

java - JSON 解析抛出错误

java - JUNIT测试报告

javascript - 用于下载 pdf 文件的 Protractor e2e 测试用例

ruby - 让 Cucumber 自动发送包含结果的电子邮件

google-chrome - 我怎样才能同时开始一个(多个) cucumber 测试?

iphone - icuke 与 xcode 4 次