我正在学习TestNG,所以我创建了一个基类,其中我为chrome浏览器创建了对象。
这是我的基础课
public class BaseClass {
public String url="https://dofdev-services.azurewebsites.net/";
public String username1="[email protected]";
public String password1="Gravity@123";
public WebDriver driver;
@BeforeClass
public void setUp()
{
System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir" +"/Drivers/chromedriver.exe"));
driver=new ChromeDriver();
}
@AfterClass()
public void tearDown()
{
driver.quit();
}
}
这是我的测试用例类
public class TC_LoginPage_001 extends BaseClass{
@Test
public void loginTestCase()
{
driver.get(url);
LoginPagePOM lp=new LoginPagePOM(driver);
lp.setUserName(username1);
lp.setPassword(password1);
lp.clickSignIn();
if(driver.getTitle().equalsIgnoreCase(""))
{
Assert.assertTrue(true);
}else {
Assert.assertTrue(false);
}
}
这是我的另一个类,这里我创建了构造函数(pom类)
public class LoginPagePOM {
WebDriver driver;
public LoginPagePOM(WebDriver driver)
{
this.driver=driver;
PageFactory.initElements(driver, this);
}
@FindBy(id="userName")
WebElement username;
@FindBy(name ="passwords")
WebElement password;
@FindBy(name="btn-sdz-login")
WebElement click;
public void setUserName(String usname)
{
username.sendKeys(usname);
}
public void setPassword(String Pass)
{
password.sendKeys(Pass);
}
public void clickSignIn()
{
click.click();
}
}
这是异常堆栈跟踪(获取空指针异常)
最佳答案
确保您的构造函数在登录页面中传递了驱动程序对象。您需要将驱动程序传递给所有页面类。登录页面也没有扩展基类。您需要进行如下扩展,并在登录页面中删除webdriver实例化。
例如:
public class LoginPagePOM extends BaseClass {
public LoginPagePOM (WebDriver driver)
{
this.driver=driver;
}
public void setUserName(){
........
}
public void setPassword(){
........
}
}