Зачем же так все усложнять? 
У вас футер и хедер встречаются на всех страницах, значит и в вашем коде они должны без проблем вызываться, вызывая обьект страниц.
Я бы сделал так. У вас ведь все классы пейджов - наследуются от базового класса. Вот в базовом классе и внесите логику касательно хедеров и футеров. Там по сути все такое и должно лежать, а не методы с кликами и прочей фигней…
Таким образом у всех наследников от базового класса - будет возможность юзать логику касательно футера и хедера.
Еще можно сделать такой костыль. По сути любая страница - это обьект, тогда в базовом классе можно добавить два свойства:
public abstract class BasePage {
public Header header;
public Footer footer;
}
в этих классах: Header, Footer - сделать конструктор, и тогда, когда будете вызывать свои методы для какой-то из страниц, то можно будет вызвать их так:
@Test()
public void someTest() {
// --------------------- Test Data ----------------------//
// --------------------- Test Case ----------------------//
HomePage homePage = new HomePage();
homPage.header.getSomthingMethodFromHeaderClass();
homPage.footer.getSomthingMethodFromFooterClass()
}
Сам такое еще не пробовал, только что в голову пришло. Надо будет как-то попробовать, но работать должно.
Но я бы советовал всю общую логику касательно всех пейджей - складывать в базовый родительский класс, он для этого и нужен, чтобы там были собраны методы и поля, которые необходимы дочерним классам. С хедером и футером - как раз именно такая история. Они есть на всех страницах, значит должна быть возможность дернуть их из разных пейджей… При этом чтобы там небыло мусора, стоит вынести оттуда клики, ожидания и выполнения js методы в другие классы.