При запуске моего теста я вижу исключение нулевого указателя при попытке взаимодействия с моим Page Factory
WebElement
.
Код, содержащийся в моем DriverFactory
:
public class DriverFactory {
private static DriverFactory instance = null;
public static ThreadLocal<WebDriver> webDriver = new ThreadLocal<WebDriver>();
public static DriverFactory getInstance() {
if ( instance == null ) {
instance = new DriverFactory();
}
return instance;
}
public static final void setDriver(String browser) {
switch (browser) {
case "firefox":
System.setProperty("webdriver.gecko.driver",
Global_VARS.FIREFOX_DRIVER_DIRECTORY);
webDriver.set(new FirefoxDriver());
break;
case "chrome":
System.setProperty("webdriver.chrome.driver",
Global_VARS.CHROME_DRIVER_DIRECTORY);
webDriver.set(new ChromeDriver());
break;
}
getDriver().manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
getDriver().manage().window().maximize();
}
public static WebDriver getDriver() {
return webDriver.get();
}
public static void tearDown() {
getDriver().quit();
}
}
Код, содержащийся в моей base
странице:
public abstract class BasePO<T> {
private @FindBy(xpath = "//a[text()='Log in']") WebElement logIn_button;
protected WebDriver driver;
public BasePO() {
this.driver = DriverFactory.getDriver();
PageFactory.initElements(this.driver, this);
}
public void openHomepage() {
driver.get("https://stackoverflow.com/");
}
public void baseClickOnLoginButton() {
logIn_button.click();
}
}
Код, содержащийся в моем BaseTest
классе:
public class BaseTest {
public SubPage subPage;
public BasePO<?> basePage;
@BeforeClass
public void pomSetup() {
subPage = PageFactory.initElements(DriverFactory.getDriver(), SubPage.class);
basePage = PageFactory.initElements(DriverFactory.getDriver(), BasePO.class);
}
@BeforeMethod
public void setup() {
DriverFactory.setDriver("chrome");
//works
//subPage.openHomepage();
}
@AfterMethod
public void tearDown() {
if (DriverFactory.getDriver() != null) {
DriverFactory.tearDown();
}
}
Код, который формирует мой Тестовый случай:
public class Test1 extends BaseTest {
@Test
public void exampleTest1() throws InterruptedException {
subPage.openHomepage(); //works as expected
subPage.clickOnLoginButton(); //Exception here, null pointer
}
}
Когда запускается мой тест TestNg
, работает метод openHomePage
, открывая указанный URL;который использует DriverFactory.getDriver().get()
, однако при попытке щелкнуть по элементу Page Factory
, например, вызову: logIn_button.click();
в моем тесте, я получаю исключение нулевого указателя, даже если я инициализировал класс?