Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在不同的功能文件和步骤定义文件中运行测试时出现NullPointerException_Java_Selenium_Selenium Webdriver_Nullpointerexception - Fatal编程技术网

Java 在不同的功能文件和步骤定义文件中运行测试时出现NullPointerException

Java 在不同的功能文件和步骤定义文件中运行测试时出现NullPointerException,java,selenium,selenium-webdriver,nullpointerexception,Java,Selenium,Selenium Webdriver,Nullpointerexception,当我在1个特征文件和1个步骤定义文件中进行所有测试时,我没有这个问题。但是,我决定开始拆分测试,并创建了2个功能文件和2个步骤定义文件。但是,我得到了NullPointerException错误 我使用一个全局变量类来初始化浏览器和设置驱动程序,如下所示 public class globalVariables { public WebDriver driver; public Properties prop; public WebDriver initializeDriver() throw

当我在1个特征文件和1个步骤定义文件中进行所有测试时,我没有这个问题。但是,我决定开始拆分测试,并创建了2个功能文件和2个步骤定义文件。但是,我得到了NullPointerException错误

我使用一个全局变量类来初始化浏览器和设置驱动程序,如下所示

public class globalVariables {
public WebDriver driver;
public Properties prop;

public WebDriver initializeDriver() throws IOException
{

    prop= new Properties();

    String browserName= "chrome";
    String pathToDriver = "";

    if(browserName.equals("chrome"))
    {
        pathToDriver = "C://Repositories//webDrivers//chromedriver_win32_85.83//chromedriver.exe";
        System.setProperty("webdriver.chrome.driver", pathToDriver);
        driver= new ChromeDriver();
        driver.manage().window().maximize();
        //execute in chrome driver
    }
    
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    return driver;
}
}
登录功能文件(由于浏览器等打开,首先运行)

}

搜索功能文件

public class login_steps extends globalVariables {
@Given("I open Chrome")
public void iOpenChrome() throws Throwable {
    driver = initializeDriver();
   // throw new PendingException();
}

@When("I browse to Queries")
public void iBrowseToQueries() {
    driver.get("https://qry.com/");
   // throw new PendingException();
}

@When("I login to Queries using {string} and {string}")
public void i_login_to_queries_using_and(String string, String string2) {
    driver.findElement(By.id("UserName")).sendKeys(string);
    driver.findElement(By.id("Password")).sendKeys(string2);
    driver.findElement(By.id("btnLogin")).click();
}

@Then("Verify that user is successfully logged in")
public void verifyThatUserIsSuccessfullyLoggedIn() {
    WebElement HomeButton = driver.findElement(By.id("divHomeLink"));
    Assert.assertEquals(true, HomeButton.isDisplayed());
}

@And("Close Browser")
public void closeBrowser() {
    driver.quit();
}
 @SmokeTest
 @Search
Feature: Queries SmokeTest
Scenario: Search Function
Given I open Chrome
And I browse to Queries
Then I login to Queries using "user1" and "pass1"
And Click on Queries Search button
And Enter keyword
And Click Search
Then Close Browser
搜索步骤定义文件

public class search_steps extends globalVariables {

@And("Click on Queries Search button")
public void clickOnQueriesSearchButton() {
    driver.findElement(By.id("imgSearchQueries")).click(); //ERROR IS HERE
}

@And("Enter keyword")
public void enterKeyword() {
    driver.findElement(By.id("txtKeywords")).sendKeys("Smoke Query");
}

@And("Click Search")
public void clickSearch() {
    driver.findElement(By.className("btn-search")).click();
}

}

您需要确保对所有类使用相同的chrome驱动程序实例,否则将发生空点异常

对驱动程序实例使用全局变量


私有静态Webdriver(在每个类的顶部设置此选项)

它在globalVariables类中设置为公共。我需要在globalVariables类中更改它吗?或者在每个步骤定义文件中添加该行?在globalVariables类中更改该行,或者您可以为驱动程序函数创建一个类并使用它,这样您就不会遇到空点错误(如果您确定),我可以在这里提供该类?我已经使用单例模式为驱动程序实例编写了Util类我刚刚在globalVariables类中添加了“static”它似乎工作得很好。不确定这是否是一种好的做法,但似乎效果不错。
public class search_steps extends globalVariables {

@And("Click on Queries Search button")
public void clickOnQueriesSearchButton() {
    driver.findElement(By.id("imgSearchQueries")).click(); //ERROR IS HERE
}

@And("Enter keyword")
public void enterKeyword() {
    driver.findElement(By.id("txtKeywords")).sendKeys("Smoke Query");
}

@And("Click Search")
public void clickSearch() {
    driver.findElement(By.className("btn-search")).click();
}

}