java - 在使用 PageObjectModel 和 TestNG 的程序中,我得到 NullPointerException
问题描述
在项目中,我创建了 3 个类。第一类是 src/main/java 中的 Browser_Initialize,第二类是 src/main/java 中的 PhoneWall_Page,第三类是 src/main/java 中的 PhoneWall_TestClass。在 Browser_Initialize 我定义了浏览器初始化。在 PhoneWall_Page 中,使用 Page Factory 初始化了所有 webelemnts 并且还创建了一些方法。在 PhoneWall_TestClass 中调用 Phonewall_Page 类中的方法。一旦代码到达@Test 注释,我就会得到空指针异常。
package com.base;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class BaseClass {
public static Properties prop;
public static WebDriver driver;
public BaseClass() {
try {
prop=new Properties();
FileInputStream fip=new FileInputStream(System.getProperty("user.dir")+"//src/main//resources//PropertyFile//PropertyData.properties");
prop.load(fip);
}
catch(FileNotFoundException e){
e.printStackTrace();
}
catch(IOException e) {
e.printStackTrace();
}
}
public void initialize() {
System.setProperty("webdriver.chrome.driver", "C:\\chromeDriver\\chromedriver_win32 (2)\\chromedriver.exe");
driver=new ChromeDriver();
driver.get(prop.getProperty("url"));
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
System.out.println(driver);
}
}
package com.pages;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import com.base.BaseClass;
public class PhonePage extends BaseClass{
WebDriver driver;
public PhonePage(WebDriver driver) {
//super(driver);
this.driver=driver;
PageFactory.initElements(driver, this);
}
@FindBy(xpath="//div[@aria-label='View device Apple iPhone 12 Pro Max ']")
WebElement Device;
public void ScrollMethod() {
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.scrollBy(0,1000)");
}
public void DeviceSelection() {
System.out.println("Device selection");
System.out.println(driver);
Device.click();
}
}
package com.test;
import org.openqa.selenium.WebDriver;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.base.BaseClass;
import com.pages.PhonePage;
public class PhoneTest extends BaseClass {
WebDriver driver;
PhonePage phonepage=new PhonePage(driver);;
//
// public PhoneTest(WebDriver driver) {
////// super(driver);
// this.driver=driver;
// }
@BeforeMethod
public void browser() {
System.out.println("Before method driver obj is:"+ driver);
initialize();
System.out.println("Before method driver obj is:"+ driver);
}
@Test
public void SelectDevice() {
System.out.println("Test mthod driveris:"+driver);
phonepage.DeviceSelection();
}
@AfterTest
public void closeBrowser() {
driver.close();
}
}
控制台中显示的错误:
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.$Proxy11.click(Unknown Source)
at com.sprint.qa.pages.PhoneWall_Page.DeviceSelection(PhoneWall_Page.java:31)
at com.sprint.qa.testcases.PhoneWall_TestClass.SelectDevice(PhoneWall_TestClass.java:31)
解决方案
推荐阅读
- c - 汇编中的内存分配和寻址
- java - 球体体积
- django - Django UpdateView:ValueError:int()的无效文字,基数为10:用户名
- html - 如何在浏览器中打开保存在 wwwroot 下的文件夹中的文件?
- image-processing - 为什么这个图像对我来说是错误的?
- powershell - 复制前 PowerShell 复制项检查目标是否具有相同的文件名
- c# - 如何在 C# 中连接多台服务器和数据库
- spring-boot - 我可以调用弹簧执行器库来获取运行状况/指标而不是使用执行器端点吗?如果是,如何?
- javascript - AWS Cognito 身份验证未按预期工作
- android - getBytes 未在 firebase .OnDataChange 中命中 .OnSuccss 或 .OnFailure 侦听器