java - Cucumber Selenium (Java) - PageFactory - NullPointEreException 获取 URL

标签 java selenium cucumber constants factory

社区您好:我陷入了下一期:

java.lang.NullPointerException
    at pages.Page_First.getURL(Page_First.java:31)
    at stepdefs.Step_First.I_go_to_Google(Step_First.java:22)
    at ✽.I go to Google (src/test/resources/features/first.feature:9)

这是我的功能:

Feature: Navigation Test

  As a user, bla, bla, bla...

  Scenario: 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

接下来是我的DriverClass

public class DriverClass implements Constants {

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

    //Initialize a log
    protected static final Logger log = Logger.getLogger(BasePage.class.getName());


    public static WebDriver initializeDriver() throws IOException {

        String browser = ReadProperties.getPropertyValue(key_browser);


        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 {
            System.setProperty("webdriver.safari.driver","/usr/bin/safaridriver");
            driver = new SafariDriver();
        }
        return driver;
    }
}

另一个是我的DriverInitializer

public class DriverInitializer extends DriverClass {


    @Before
    public void initialize() throws IOException {

        log.info("-----> Proceed to initialize driver <-----");

        driver = DriverClass.initializeDriver();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        driver.manage().window().maximize();

        if (driver == null) {
            log.info("-----> Driver did not initialize correctly <-----");
        }
    }

    @After
    public void close(){
        driver.quit();
    }
}

我的页面类(class):

public class Page_First extends BasePage implements Constants {

    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 getURL() throws IOException {

        String url = ReadProperties.getPropertyValue(key_url);
        driver.get(url);

我的步骤定义:

public class Step_First {

    public static WebDriver driver;
    private Page_First page_first = PageFactory.initElements(driver, Page_First.class);


    @Given("I go to Google")
    public void I_go_to_Google () throws IOException {

        page_first.getURL();
    }

我知道问题出在下一段代码(页面)中:

String url = ReadProperties.getPropertyValue(key_url);
driver.get(url);

顺便说一下:这是我的常量

公共(public)接口(interface)常量{

String key_url = "url";
String key_browser = "browser";

}

拜托,我需要你的帮助。提前致谢

更新:这是我用于读取属性文件的文件:

public class ReadProperties {

    public static final String filePath = "src/main/resources/data/config.properties";


    public static String getPropertyValue(String key) throws IOException {
        Properties prop = new Properties();
        FileInputStream fis = new FileInputStream(filePath);
        prop.load(fis);
        fis.close();
        return prop.getProperty(key);
    }
}

最佳答案

可能它找不到您的路径。试试这个:

public class ReadProperties {

    public static String getPropertyValue(String key) throws IOException {
        String filePath = "src/main/resources/data/config.properties";
        InputStream input = new FileInputStream(filePath);
        Properties prop = new Properties();

        try (input) {
            prop.load(input);
            return prop.getProperty(key);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

关于java - Cucumber Selenium (Java) - PageFactory - NullPointEreException 获取 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60402016/

相关文章:

java - 我可以使用 loopj async HTTP 客户端将数据发送到 PHP 页面吗?

selenium - 如何在 Selenium IDE 中查找按钮是否被禁用

selenium - PageFactory 中的 StaleElementReference 异常

python - 如何连续运行多个 Selenium 测试

java - 在 Android 上使用 Cucumber 时出现 AmbigouslyStepDefinitionsException

javascript - Protractor 和 cucumber - [启动器] 错误 : TypeError: Cannot read property 'strict' of undefined

java - Web 应用程序 - 身份验证/登录框架

java - 100% 不可变,但仍然不是线程安全的

java - 加载类时未初始化静态变量

java - 如何使用母语运行 Cucumber?