eclipse 由于全局属性的问题,自动化测试未执行

iszxjhcz  于 8个月前  发布在  Eclipse
关注(0)|答案(2)|浏览(88)

所以我在我的全局属性文件中有以下内容:

browser=Chrome
QAurl = https://rahulshettyacademy.com/seleniumPractise/#/

然后我有了properties类,以便能够读取全局属性文件:

public class TestBase {
    
    public WebDriver driver;
    
    public WebDriver WebDriverManager() throws IOException  
    {
    FileInputStream fis = new FileInputStream(System.getProperty("user.dir")+"//src//test//Resources//global.properties");
    Properties prop = new Properties();
    prop.load(fis);
    String url = prop.getProperty("QAUrl"); //The url we will pass here
    if(driver == null)
    {
        if(prop.getProperty("browser").equalsIgnoreCase("Chrome"))
        {
    driver.get(url);
    driver = new ChromeDriver();
    driver.manage().window().maximize();
        }
        if(prop.getProperty("browser").equalsIgnoreCase("firefox"))
        {
            //firefox code
        }
    }
    
    return driver;
    

    }
}

我的控制台出现以下错误:

FAILED: runScenario("Search Experience for product search in both home and Offers page", "Search and Place the order for Products")
        Runs Cucumber Scenarios
java.lang.NullPointerException: Cannot invoke "org.openqa.selenium.WebDriver.get(String)" because "this.driver" is null
    at Utils.TestBase.WebDriverManager(TestBase.java:24)
at Utils.TestContextSetup.<init>(TestContextSetup.java:20)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
    at org.picocontainer.injectors.AbstractInjector.newInstance(AbstractInjector.java:145)
    at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:342)
    at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)

你知道我错在哪里吗?

sshcrbum

sshcrbum1#

创建TestBase类的构造函数,并将用于加载属性的代码放在构造函数中,如下所示:

public class TestBase {
    
    public WebDriver driver;
    public static Properties prop;

    public TestBase(){
        try {
            prop = new Properties();
            FileInputStream ip = new FileInputStream(System.getProperty("user.dir")+ "//src//test//Resources//global.properties");
            prop.load(ip);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public WebDriver WebDriverManager() throws IOException  {
    
         String url = prop.getProperty("QAUrl"); //The url we will pass here
         // rest of the code
    }
}
wmomyfyw

wmomyfyw2#

此错误消息...

FAILED: runScenario("Search Experience for product search in both home and Offers page", "Search and Place the order for Products")
    Runs Cucumber Scenarios
java.lang.NullPointerException: Cannot invoke "org.openqa.selenium.WebDriver.get(String)" because "this.driver" is null

.暗示当执行以下代码行时,driver 示例为null:

driver.get(url);

详情及解决方案

您已经将 driver 声明为示例变量:

public WebDriver driver;

接下来当你读取browser属性时,首先你需要初始化ChromeDriver发起的google-chromeBrowsing Context,然后调用 url,如下所示:

public class TestBase {

    public WebDriver driver;

    public WebDriver WebDriverManager() throws IOException  {

        FileInputStream fis = new FileInputStream(System.getProperty("user.dir")+"//src//test//Resources//global.properties");
        Properties prop = new Properties();
        prop.load(fis);
        String url = prop.getProperty("QAUrl"); //The url we will pass here
        if(driver == null) {
            if(prop.getProperty("browser").equalsIgnoreCase("Chrome")) {
                driver = new ChromeDriver();
                driver.get(url);
                driver.manage().window().maximize();
            }
            if(prop.getProperty("browser").equalsIgnoreCase("firefox")) {
                driver = new FirefoxDriver();
                driver.get(url);
            }
        }
        return driver;
    }

}

相关问题