Я пытаюсь следовать этому руководству в Интернете: https://www.youtube.com/watch?v=x5Ru0f8uOqw&list=PL_noPv5wmuO_t6yYbPfjwhJFOOcio89tI&index=14
и закодировали PageObjects, файл Feature и файл StepDefs точно так же, как в демонстрации. Однако, когда я запускаю, я получаю исключение нулевого указателя в Line16, contactPage в методе @When.
public class StepDefinition {
WebDriver driver = new FirefoxDriver();
LandingPage landingPage;
ContactPage contactPage;
@Given("^I am on the zoo site$")
public void i_am_on_the_zoo_site() throws Throwable {
LandingPage landingPage = new LandingPage(driver);
landingPage.navigateToWebApp();
}
@When("^I click on \"(.*?)\"$")
public void i_click_on(String link) throws Throwable {
contactPage = landingPage.navigateToContactPage(link);
}
... поэтому я попытался создать экземпляр в верхней части класса следующим образом: -
WebDriver driver = new FirefoxDriver();
LandingPage landingPage = new LandingPage(driver);
ContactPage contactPage = new ContactPage(driver);
...и все устраивает.
Должен ли я создавать экземпляр pageobject таким образом? Что было бы наилучшей практикой? И почему код в демонстрации не выдает нулевой указатель?
Для контекста, вот соответствующие объекты страницы: Абстрактная страница: -
public class AbstractPage {
protected WebDriver driver;
public AbstractPage (WebDriver driver){
this.driver = driver;
}
public LandingPage navigateToWebApp(){
driver.navigate().to("http://thetestroom.com/webapp/");
return new LandingPage(driver);
}
public void closeDriver(){
driver.quit();
}
}
Целевая страница: -
public class LandingPage extends AbstractPage {
public LandingPage(WebDriver driver) {
super(driver);
}
public ContactPage navigateToContactPage(String link){
driver.findElement(By.id(link.toLowerCase() + "_link")).click();
return new ContactPage(driver);
}
}
Контактная страница:-
public class ContactPage extends AbstractPage{
public ContactPage(WebDriver driver) {
super(driver);
}
public ContactPage setNameField(String value){
driver.findElement(By.name("name_field")).sendKeys(value);
return new ContactPage(driver);
}
//more setter methods