Функция элементов инициализации Pagefactory должна быть объявлена ​​один раз в коде для оптимизации кода.

Я автоматизирую свой проект, используя объектную модель страницы. Но я заметил, что всякий раз, когда я пишу два разных сценария для автоматизации одного и того же объекта страницы, мне нужно инициализировать элементы для этого тестового примера каждый раз, когда я пишу тестовый пример с использованием метода Pagefactory.initElements. Есть ли способ, чтобы это можно было инициализировать только один раз и можно было повторно использовать во всех тестовых примерах?

Я попытался сделать ссылочную переменную, т.е., например. "manorgpom ort=PageFactory.initElements(getdriver(), manorgpom.class);" ort должен быть статическим, но он дает исключение нулевого указателя. Я инициализировал их вне своих тестовых случаев и сделал ссылочную переменную статической, но безуспешно.

    @Test(priority=3)
public void orgact() throws Exception {
    manorgpom ort=PageFactory.initElements(getdriver(), manorgpom.class);
    getdriver().manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    ort.actorg();
    Thread.sleep(5000);
}

@Test(priority=4)
public void orgadd() throws Exception{
    manorgpom ort=PageFactory.initElements(getdriver(), manorgpom.class);
    getdriver().manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
    ort.addorg();
    Thread.sleep(10000);
}

Как вы видите выше, мне нужно инициализировать веб-элементы каждый раз, когда я пишу тестовый пример. Каждый раз мне нужно упомянуть "manorgpom ort=PageFactory.initElements(getdriver(), manorgpom.class);". Я хочу оптимизировать это.

Это фрагмент класса managementorgpom.

    public class manorgpom extends Basetest{
@FindBy(xpath="//*[@href='/organization']")
WebElement orglink;

@FindBy(xpath="//*[@class='anticon anticon-filter']")
WebElement filter;

@FindBy(xpath="//*[@placeholder='e.g. High School USA']")
WebElement filternametxt;

@FindBy(xpath="//*[text()='Activate']")
WebElement activatelink;

@FindBy(xpath="//*[@placeholder='e.g. Johnny']")
WebElement contactfirstname;

Когда я сделал переменную ссылки орта статической, я получаю java.lang.nullPointerException каждый раз, когда запускаю набор. Помогите пожалуйста мне.


person Pratik Pathare    schedule 10.10.2019    source источник
comment
Добавление PageFactory.initElements в конструктор класса страницы может помочь. Вы можете дать более подробную информацию?   -  person Pankaj Devrani    schedule 10.10.2019
comment
Именно то, что вам нужно? Не могли бы вы уточнить?   -  person Pratik Pathare    schedule 10.10.2019
comment
Вы пытались инициализировать элементы и уровень объекта страницы? Можете ли вы поделиться информацией о классе объектов вашей страницы   -  person Pankaj Devrani    schedule 11.10.2019
comment
Я добавил фрагмент, в котором я объявил все веб-элементы.   -  person Pratik Pathare    schedule 11.10.2019
comment
Ваш getdriver() каждый раз создает новый объект драйвера?   -  person Durga Prasad Behera    schedule 11.10.2019
comment
Нет. Я объявил его закрытым и написал метод getdriver() для доступа к этой ссылочной переменной веб-драйвера. Что я сделал, так это частный драйвер WebDriver; защищенный WebDriver getdriver () {возврат драйвера;}; в Базовом классе.   -  person Pratik Pathare    schedule 11.10.2019


Ответы (1)


Это потому, что ваш веб-драйвер создается каждый раз. Вам нужно сделать его одноэлементным и использовать только один экземпляр webDriver.

public class driverSingleton { 
private static final webDriver instance = new ChromeDriver();   //just for example 
//private constructor to avoid client applications to use constructor private EagerInitializedSingleton(){} 
public static driverSingleton getInstance(){ return instance;

} 
person Ajitav Basak    schedule 15.10.2019
comment
Не могли бы вы добавить код, чтобы лучше показать, что вы имеете в виду? - person SiKing; 15.10.2019
comment
открытый класс driverSingleton { частный статический окончательный экземпляр webDriver = новый ChromeDriver(); //для примера //закрытый конструктор, чтобы клиентские приложения не использовали конструктор private EagerInitializedSingleton(){} public static driverSingleton getInstance(){ return instance; } } - person Ajitav Basak; 15.10.2019
comment
Теперь используйте getInstance, чтобы получить экземпляр драйвера и работать с ним. Это должно решить вашу проблему - person Ajitav Basak; 15.10.2019
comment
Пожалуйста, не добавляйте код в комментарии, а вместо этого отредактируйте свой ответ, чтобы улучшить его. - person SiKing; 16.10.2019