Можете ли вы переопределить содержимое в блоке статического содержимого при расширении классов в geb?

У меня есть 2 класса, один расширяет другой, они перечислены ниже:

class TabledPage extends Page {

    static content ={
        table {$(By.xpath("//tbody"))}
        headers {$(By.xpath("//thead"))}
    }

    Navigator gatAllRows(){
        return table.children()
    }

    Navigator getRow(int index){
        return table.children()[index]
    }

    Navigator getRow(String name){
        return table.children().find{it.text()==name}
    }

    Navigator getColumn(Navigator row, int column){
        return row.children()[column]
    }


}

и этот класс, который расширяет вышеуказанный класс:

class somePage extends TabledPage{
    static content ={
        table(required: false){$(By.xpath("//table[contains(@class,'w-100 table-striped wi-table-hover')]//tbody"))} // I want this to overwrite the table def in TabledPage
    }
}

Итак, в приложении, которое я тестирую, на большинстве страниц есть только 1 таблица, но в некоторых случаях есть 2 таблицы (одна скрыта в зависимости от размера экрана), поэтому я хочу иметь возможность переопределить определение таблицы в этом случае, чтобы указать на конкретная таблица, могу ли я сделать это без переопределения методов getRow или их также необходимо переопределить?

Просто чтобы привести пример того, как я это тоже называю:

at SomePage
getRow(0)

это работает, но он использует определение TabledPage таблицы Navigator вместо определения somePage, и мне интересно, есть ли способ заставить его использовать другое определение


person switch201    schedule 23.08.2017    source источник
comment
В итоге я переопределил определение таблицы в TabledModule для работы со всеми различными страницами, но мне все еще любопытно, возможно ли то, что я предлагаю.   -  person switch201    schedule 23.08.2017
comment
Что заставляет вас полагать, что _ он использует определение TabledPage таблицы Navigator вместо определения somePage_? Я считаю, что переопределение контента работает так, как вы ожидаете. Поэтому мне интересно, было ли то, что вы наблюдали, связано не с использованием определения из TabledPage, а с чем-то совершенно другим.   -  person erdi    schedule 24.08.2017
comment
@erdi Я постараюсь перепроверить это, когда у меня будет шанс, и дам вам знать, что я найду.   -  person switch201    schedule 25.08.2017


Ответы (1)


Будет ли это работать, если вы измените содержимое из спецификации, а не со страницы? Вот как я использую динамические селекторы на странице:

static content=
{
    quantityField{$("$quantitySelector")
}

void setSelectors(tableIndex, row)
{
    quantitySelector="#offerDtos$tableIndex\\.segments$row\\.quantity"
}

В моей спецификации я просто вызываю setSelectors с соответствующими значениями.

person Nicole Zeckner    schedule 30.08.2017