尝试使用 Cucumber 加载 url 构建 BDD 框架时遇到问题

问题描述 投票:0回答:1

出现错误:java.lang.NullPointerException:无法调用“org.openqa.selenium.WebDriver.get(String)”,因为“this.driver”为空 我正在尝试创建示例框架,但面临问题,因为 url 无法正确打开,而且浏览器打开两次。

Chrome 浏览器打开两次,并且在调试驱动程序时我们看到空值。

以下是步骤定义文件:

公开课步骤{

private WebDriver driver;

Baseclass base = new Baseclass(driver);
Loginpage login = new Loginpage(driver);

public static Logger logfile = LogManager.getLogger(steps.class.getName());





@Given("open chrome browser")
public void openBrowser() {
    base.intiatingDriver();
    
}
@And("Login to application url")
public void loginAppicaltionUrl()  {
    login.openUrlLogin("https://opensource-demo.orangehrmlive.com/web/index.php/auth/login");
    
}
@And("^enter the valid \"(.*)\"$")
public void enterValidUsername(String username) {
    login.enteringUsername(username);
}

@And("^enter valid \"(.*)\"$")
public void enterValidPassword(String password) {
    login.enteringPassword(password);   
}

基类:

公共类基类{

private  WebDriver driver=null;

public static Logger logfile = LogManager.getLogger(Baseclass.class.getName());

public static String parentWindow;


public Baseclass(WebDriver driver) {
    
    this.driver = driver;
    PageFactory.initElements(driver, this);
    }

public void intiatingDriver() {
    
    driver =new ChromeDriver();
    driver.manage().window().maximize();

}

public void openUrl() throws Throwable{
    driver.get("https://opensource-demo.orangehrmlive.com/web/index.php/auth/login");
    threadsleep(5000);
    logfile.info("Url opened successfully");
}

public void sendKeysUsingCss(WebElement element,String username) {
    driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(40));
    element.sendKeys(username);
    
}

登录班级:

公共课登录页面{

private  WebDriver driver=null;                                           
                                                                          
                                                                          
public Loginpage(WebDriver driver) {                                      
    this.driver = driver;                                                 
    PageFactory.initElements(driver, this);                               
                                                                          
}                                                                         
                                                                          
Baseclass base = new Baseclass(driver);                                   
                                                                          
                                                                          
@FindBy(how=How.CSS, using="input[name^='username']")                     
private WebElement name;                                                  
                                                                          
@FindBy(how=How.CSS,using="input[name^='password']")                      
private WebElement passwrd;                                               
                                                                          
                                                                          
                                                                          
                                                                          
                                                                          
                                                                          
                                                                          
public void openUrlLogin(String url) {                                    
    try {                                                                 
        driver.get(url);                                                  
        driver.manage().window().maximize();                              
        base.threadsleep(5000);                                           
        base.logfile.info("Url opened successfully");                     
    } catch (Throwable e) {                                               
        e.printStackTrace();                                              
        System.out.println(e);                                            
        Assert.fail("Url not opened");                                    
                                                                          
    }                                                                     
}                                                                         
                                                                          
public void enteringUsername(String username) {                           
    name.sendKeys(username);                                              
                                                                          
}                                                                         
selenium-webdriver selenium-chromedriver ui-automation cucumber-junit
1个回答
0
投票

您得到

NullPointerException
,因为您尚未初始化任何驱动程序实例。

BaseClass
LoginClass
中,您在构造函数中传递驱动程序,然后调用
PageFactory.initElements(driver, this);
initElements
方法期望驱动程序已经作为实例存在,但此时它为空。

此行在类创建时在运行时调用。此时您没有任何驱动程序实例,因此您会遇到异常。

   private WebDriver driver;

   Baseclass base = new Baseclass(driver);
   Loginpage login = new Loginpage(driver);

要解决此问题,您应该创建一个方法来初始化驱动程序并在创建类之前调用。

    private WebDriver driver;

    @BeforeClass
    public static void setupAll() {
        WebDriverManager.getInstance().setup();
        driver = new ChromeDriver();
    }

其中

WebDriverManager
定义为
pom.xml

中的依赖关系
      <dependency>
            <groupId>io.github.bonigarcia</groupId>
            <artifactId>webdrivermanager</artifactId>
            <version>5.3.2</version>
      </dependency>
© www.soinside.com 2019 - 2024. All rights reserved.