ページ オブジェクト モデルをセットアップし、PageFactory を使用して Web オブジェクトを初期化しようとしています。
testBase でドライバーを初期化し、ページ クラスをこの testbase に拡張しました。テスト ケースを実行しようとすると、以下の nullpointerexception がスローされます
TestBase.java
public class testBase {
public WebDriver driver;
public static Properties prop;
public FlightBookingPage FBPage;
public testBase(){
try {
prop = new Properties();
FileInputStream ip = new FileInputStream(System.getProperty("user.dir")+ "/src/main/java"
+ "/Config/config.properties");
prop.load(ip);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void setDriverPath() {
if (PlatformUtil.isMac()) {
System.setProperty("webdriver.chrome.driver", "chromedriver");
driver = new ChromeDriver();
}
if (PlatformUtil.isWindows()) {
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
driver = new ChromeDriver();
}
if (PlatformUtil.isLinux()) {
System.setProperty("webdriver.chrome.driver", "chromedriver_linux");
driver = new ChromeDriver();
}
driver.manage().window().maximize();
driver.manage().deleteAllCookies();
driver.manage().timeouts().pageLoadTimeout(testUtil.PAGE_LOAD_TIMEOUT, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(testUtil.IMPLICIT_WAIT, TimeUnit.SECONDS);
}
以下のコードは、ページ クラスから適切な関数と変数を呼び出す実際のテスト クラスです。
public class FlightBookingTest extends testBase {
@BeforeMethod
public void setup() {
FBPage = new FlightBookingPage();
setDriverPath();
driver.get(prop.getProperty("url"));
}
@Test
public void testThatResultsAppearForAOneWayJourney() {
FBPage.clickOneWayBtn();
FBPage.typeOriginCity("Bangalore");
FBPage.selectOriginCityfromList("Bangalore");
FBPage.typeDestinCity("Delhi");
FBPage.selectDestinCityfromList("Delhi");
FBPage.selectDate();
FBPage.clickSearch();
// verify that result appears for the provided journey search
Assert.assertTrue(isElementPresent(By.className("searchSummary")));
}
@AfterMethod
public void tearDown() {
// close the browser
driver.quit();
}
以下は、上記のテストのページ クラスです。
public class FlightBookingPage extends testBase {
// Page Factory - OR:
@FindBy(id = "OneWay")
public WebElement oneWayRdBtn;
@FindBy(id = "FromTag")
public WebElement fromCitytxtbox;
@FindBy(xpath = "//*[@id='ui-id-1']/li")
public List<WebElement> originOptionList;
@FindBy(id = "toTag")
public WebElement toCitytxtbox;
@FindBy(xpath = "//*[@id='ui-id-2']/li")
public List<WebElement> destinOptionList;
@FindBy(xpath = "//*[@id='ui-datepicker-div']/div[1]/table/tbody/tr[3]/td[7]/a")
public WebElement date;
@FindBy(id = "SearchBtn")
public WebElement searchBtn;
@FindBy(className = "searchSummary")
public WebElement searchResultsHeadertxt;
// Initializing the Page Objects:
public FlightBookingPage(){
PageFactory.initElements(driver, this);
}
public void clickOneWayBtn() {
oneWayRdBtn.click();
}
public void typeOriginCity(String origin) {
fromCitytxtbox.clear();
fromCitytxtbox.sendKeys(origin);
}
public void selectOriginCityfromList(String origin) {
for (WebElement list : originOptionList) {
if (list.getText().contains(origin)) {
list.click();
break;
}
}
}
public void typeDestinCity(String destin) {
toCitytxtbox.clear();
toCitytxtbox.sendKeys(destin);
}
public void selectDestinCityfromList(String destin) {
for (WebElement list : destinOptionList) {
if (list.getText().contains(destin)) {
list.click();
break;
}
}
}
public void selectDate() {
date.click();
}
public void clickSearch() {
searchBtn.click();
}
public WebElement verifySearchSummaryHeader() {
return searchResultsHeadertxt;
}
}
フォーカスがこのブロックに変わるとすぐに、以下のエラー メッセージが表示されます
public void clickOneWayBtn() {
oneWayRdBtn.click();
}
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.$Proxy9.click(Unknown Source)
at Pages.FlightBookingPage.clickOneWayBtn(FlightBookingPage.java:45)
at FlightBookingTest.testThatResultsAppearForAOneWayJourney(FlightBookingTest.java:24)