java - 我已经创建了 chrome 驱动程序对象,然后我得到了 java.lang.NullPointerException
问题描述
我正在学习 TestNG,所以我创建了一个基类,其中我为 chrome 浏览器创建了对象。
这是我的基类
public class BaseClass {
public String url="https://dofdev-services.azurewebsites.net/";
public String username1="info@gravityconsulting.com.au";
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();
}
}
这是异常堆栈跟踪(获取空指针异常)
解决方案
你有一个驱动程序BaseClass
,然后你又在LoginPagePOM
课堂上做一个驱动程序,因此你得到了 NPE。
为了解决这个问题,您制作了驱动程序static
,然后在需要它的所有类中使用该驱动程序。您不需要再次初始化它。
您可以public static WebDriver driver;
在您的课程中BaseClass
使用,然后您可以BaseClass.driver
在您需要的所有课程中使用它。
你TC_LoginPage_001
会是这样的:
public class TC_LoginPage_001 extends BaseClass{
@Test
public void loginTestCase()
{
BaseClass.driver.get(url);
LoginPagePOM lp=new LoginPagePOM(driver);
lp.setUserName(username1);
lp.setPassword(password1);
lp.clickSignIn();
if(BaseClass.driver.getTitle().equalsIgnoreCase(""))
{
Assert.assertTrue(true);
}else {
Assert.assertTrue(false);
}
}
你LoginPagePOM
会是这样的:
public class LoginPagePOM {
public LoginPagePOM()
{
PageFactory.initElements(BaseClass.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();
}
}
推荐阅读
- owncloud - 如何使用 Windows 构建 Qtkeychain?
- spring-cloud-dataflow - 在 Spring Cloud Data Flow 中将应用程序属性列入白名单
- python - 在 Python 中编码序数值
- android - 构建日历并禁用特定日期
- node.js - 当正文解析器出现错误时,提交页面上的 Flash 错误
- java - 从多个线程中读取一个java“队列”,每个线程中的所有对象
- c# - Windows Server 2016 中的证书吊销检查失败
- r - R:使用 prcomp(,center=T,scale=T) 和缩放数据然后使用 prcomp() 之间的区别
- validation - 使用自定义错误消息在 WCF 服务中进行验证
- typescript - 在 Typescript 中使用带有约束的泛型类型时出错 - 2536