0

ページ オブジェクト モデルをセットアップし、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)
4

3 に答える 3