Селен огурца - Java - PageFactory: определение шага: java .lang.NullPointerException - PullRequest
0 голосов
/ 09 марта 2020

Привет, сообщество: я столкнулся со следующей проблемой: я работаю с Cucumber, Selenium WebDriver с использованием Page Factory. Ошибка, полученная здесь, происходит со стороны определения шага:

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

Пожалуйста, мне нужен ваш помощь.

1 Ответ

0 голосов
/ 09 марта 2020

Инициализация класса объекта Page

page_First page_first=new page_First();
...