Я пытаюсь уменьшить многословность в моем сценарии, следуя практике кодирования «Не повторяйся» (СУХОЙ). Я наткнулся на вызов. Я реализовал базовый тест с использованием селена и огурца с Pagefactory. У меня есть объекты моей страницы в одном отдельном классе BasePage
и инициализированная фабрика страниц в другом классе Test
. Инициализация происходит внутри каждого метода, и тест выполняется в соответствии с ожиданиями.
public class Test {
private static WebDriver driver;
public void navigateToUrl(String url) {
//Launch browser
}
public void firstLogin(String username, String Password) {
BasePage basePage = PageFactory.initElements(driver, BasePage.class); //Initialisation
basePage.usernameField.click();
basePage.passwordField.sendKeys("pwd");
}
public void secondLogin() {
BasePage basePage = PageFactory.initElements(driver, BasePage.class); //Initialisation
basePage.myIdField.click();
basePage.myPasswordField.click();
}
Я пытаюсь улучшить сценарий. Я хочу инициализировать pagefactory только один раз, возможно, на уровне класса, а не инициализировать внутри каждого метода, поэтому я удалил инициализацию из всех методов и объявил ее один раз на уровне класса:
public class Test {
private static WebDriver driver;
BasePage basePage = PageFactory.initElements(driver, BasePage.class); //Initialisation
Я получил исключение nullpointerException.
Я тоже попробовал это, поместив инициализацию в метод установки:
public class Test {
private static WebDriver driver;
private static BasePage basePage;
@BeforeMethod
public void setUp() {
basePage = PageFactory.initElements(driver, BasePage.class);
}
Тем не менее, это привело к Nullpointer
Мой BasePage
заголовок выглядит так:
public class BasePage {
private final WebDriver driver;
public BasePage(WebDriver driver) {
this.driver = driver;
}
Я не только инициализируюсь несколько раз, я также использую переменную basePage
в каждой строке в методах firstLogin
и secondLogin
. Есть ли способ обойти это, я не знаю, но было бы полезно, если кто-то может посоветовать или дать вклад. Спасибо.