Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.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 两个类之间的关系(页面对象模型)在传递对象时引发空指针异常_Java_Selenium_Pom.xml_Pageobjects - Fatal编程技术网

Java 两个类之间的关系(页面对象模型)在传递对象时引发空指针异常

Java 两个类之间的关系(页面对象模型)在传递对象时引发空指针异常,java,selenium,pom.xml,pageobjects,Java,Selenium,Pom.xml,Pageobjects,我是这个论坛的新手。对不起,问题太长了。我粘贴了四个文件。两个类文件是PageObject文件。一个文件是测试文件,另一个是初始化WebDriver 当我运行登录测试文件时,我得到一个空指针异常 //首页 package com.base.pages; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; im

我是这个论坛的新手。对不起,问题太长了。我粘贴了四个文件。两个类文件是PageObject文件。一个文件是测试文件,另一个是初始化WebDriver

当我运行登录测试文件时,我得到一个空指针异常

//首页

package com.base.pages;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.testng.Reporter;

public class ActitimeLoginPage {
protected WebDriver driver;

public ActitimeLoginPage(WebDriver driver){
    PageFactory.initElements(driver, this);

}

@FindBy(xpath="//input [@ name = 'username']")
public WebElement txtusername;

@FindBy(xpath="//input[@type='password']")
public WebElement txtpassword;

@FindBy(xpath="//input[@type='submit']")
public WebElement btnLogin;

@FindBy(xpath="//table[1]/tbody/tr[7]/td[3]")
public WebElement versionnumber;

@FindBy(xpath="//a[@href='http://www.actimind.com']")
public WebElement actimindlink;

public Opentaskpage login(String username, String password){
    txtusername.sendKeys(username);
    Reporter.log("Entered Username",true);
    txtpassword.sendKeys(password);
    Reporter.log("Entered password",true);
    btnLogin.click();
    Reporter.log("clicked on login",true);

    return new Opentaskpage(driver);

}

}

//第二页

package com.base.pages;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.testng.Reporter;

public class Opentaskpage {
protected WebDriver driver;

public Opentaskpage(WebDriver driver){
    PageFactory.initElements(driver, this);

}

@FindBy(xpath="//td[contains(text(),'Open Tasks')]")
public WebElement Heading;

@FindBy(xpath="/login.do?logout=1")
public WebElement btnLogout;

public void Logout(){
    btnLogout.click();
    Reporter.log("Clicked on logout",true);
    //return new ActitimeLoginPage(this.driver);
}


}
//预分类文件

package com.base.generic;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;

public class SuperTestNg {


public WebDriver driver = new FirefoxDriver();
@BeforeMethod
public void precondtion(){

    driver.get("http://indbrnb0033/login.do");
    driver.manage().window().maximize();



}

@AfterMethod
public void postcondtion(){
    driver.close();

}

}
//测试文件

package com.Acti.Tests;

import org.testng.annotations.Test;

import com.base.generic.SuperTestNg;
import com.base.pages.ActitimeLoginPage;
import com.base.pages.Opentaskpage;

public class Login extends SuperTestNg {
@Test
public void Test_Login(){

    ActitimeLoginPage page = new ActitimeLoginPage(driver);
    Opentaskpage page2 = page.login("admin", "manager");
    page2.Logout();


}

}
我不知道如何确切地界定这个问题。第一页的方法返回构造函数,我无法初始化第二页

如果我做错了什么,请帮助我,或者告诉我最好的方法。提前谢谢

我得到一个错误:

Exception in thread "main" java.lang.NullPointerException
    at org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement(DefaultElementLocator.java:69)
    at org.openqa.selenium.support.pagefactory.internal.LocatingElementHandler.invoke(LocatingElementHandler.java:38)
    at com.sun.proxy.$Proxy2.click(Unknown Source)
    at com.actitime.OpentaskPage.clicklogout(OpentaskPage.java:20)
    at com.actitime.ActitileLogin_Test.main(ActitileLogin_Test.java:27)

看起来像是打字错误。能否在以下构造函数中将输入参数的名称更改为“driver”:

public Opentaskpage(WebDriver drier){
PageFactory.initElements(driver, this);
}


它会显示“drier”,将其更改为“driver”,然后重试。

感谢您的回答,我已经编辑了上面的代码行,并且得到了相同的错误:-)