t.me/atinfo_chat Telegram группа по автоматизации тестирования

PageFactory и список элементов. Собрать в list при пагинации

page-factory
page-object
java
webdriver
Теги: #<Tag:0x00007fb2fbd9ba38> #<Tag:0x00007fb2fbd9b8a8> #<Tag:0x00007fb2fbd9b768> #<Tag:0x00007fb2fbd9b5d8>

(Victor Bystrov) #1

Проблема (Вопрос) заключается …
Создал такую pageobject model.
Есть страница со списком пользователей.

Создал класс для строчки одного пользователя

public class EmployeeRow  extends AbstractPage {
 @FindBy(xpath = "./td/div")
    private WebElement name;

 protected EmployeeRow(WebElement row, WebDriver driver) {
        super(driver);
        PageFactory.initElements(new DefaultElementLocatorFactory(row),this);

public String getEmployeeName() {
      return  name.getText();
    }
}

Класс списка пользователей на странице:

public class EmployeeRowList extends AbstractPage {

    @FindBy(xpath = "//tbody[@class='MuiTableBody-root']/tr[@class='MuiTableRow-root MuiTableRow-hover']")
    private List<WebElement> employeeList;


    public EmployeeRowList(WebDriver driver) {
        super(driver);
        PageFactory.initElements(driver, this);
    }

И класс самой страницы:

public class EmployeesPage extends AbstractPage {

     private EmployeeRowList employeeRowList;

 public EmployeesPage(WebDriver driver) {
        super(driver);
        new LoginPage(driver).openPage().inputPassword(getAdminLogin(), getAdminPassword());
        employeeRowList = new EmployeeRowList(driver);
    }


  public EmployeeRowList initEmployeeList() {
        return PageFactory.initElements(driver, EmployeeRowList.class);
    }

 public List<EmployeeRow> getAllEmployes()  {
        List<EmployeeRow> list = new ArrayList<>();
        changePaginationSize(2);
     while(nextPaginationButton.isEnabled()) {
	list.addAll(initEmployeeList().getEmployeesList());
        nextPaginationPage();
}

Задача получить список всех пользователей как List со всех страниц пагинации.

Проблема в том, что в листе получаются динамические элементы, и к ним нет доступа, если нахожусь не на той странице.
Подскажите как можно собрать все эти объекты , что б к ним был доступ?


(Salciuc Vitalie) #2

Вроде-бы и не получешь нельзя взять елементы которых ты не видешь тебе надо туда иди взять их записать а потом работать сними как-бы селениум видет то что ты видеши и ничего большего если елемент не находется в обзоре твоего екрана он и не увидет неговоря уже что-бы с других страниц (незнаю точно может есть способ)


(Victor Bystrov) #3

Смысл в том , что я их записал в лист как объекты EmployeeRow. И если лист из элементов одной страницы, то всё работает корректно. Но когда я перещелкиваю на вторую страницу, то объекты первой страницы как бы перезаписываются объектами второй страницы. Пока выкрутился делать List<String>.


(Михаил Новицкий) #4
public List<SingleTire> getSingleTires() {

        List<SingleTire> singleTires = new ArrayList<>();

        boolean isLastPageDone = false;

        while (!isLastPageDone) {

            List<SingleTire> singleTiresOnCurrentPage = getSingleTiresOnCurrentPage();

            singleTires.addAll(singleTiresOnCurrentPage);

            if (isNextButton()) {
                clickNextPage();
            } else {
                isLastPageDone = true;
            }

        }

        return singleTires;
    }

(Victor Bystrov) #5

Если я правильно понял, то проблемы это не решает. Я собрал в листе все объекты, которые мне надо. Но когда в этом листе, я обращаюсь к элементу, то Pagefactory начинает его инициализировать, но не находит на странице(если элемент не с текущей страницы). Получается лист всех элементов, но работать могу только с элементами на текущей страницы. Сейчас решил вопрос так: В классе EmployeeRow создал внутренний класс FinalEmployeeRow, который принимает все нужные параметры и теперь у меня List<FinalEmployeeRow>элементов, которые не могут быть переинициализированы


(Михаил Новицкий) #6

Возможно мой вариант и не подходит вам, так как я не пользуюсь page factory и все мои строчки с каждой страницы хранятся просто в объекте и потом я вызываю то что мне нужно.


(Salciuc Vitalie) #8

while(nextPaginationButton.isEnabled()) {
list.addAll(initEmployeeList().getEmployeesList());
nextPaginationPage();
с последней страницы ты не возмешь елементы нет ?