Создайте объект страницы (для многократного использования) для каждого виджета (widget = button, combobox, textfield, ...). Конструктор виджета принимает объект WebElement или объект By. Каждый объект страницы должен использовать объект страницы многократного использования. Вот пример простой страницы входа.
public class MyLoginPage {
private TextField mUsername;
private TextField mPassword;
private Button mSignon;
...
// getter
public TextField getUsername() {
return mUsername;
}
}
С помощью некоторых эвристик вы должны быть в состоянии выбрать правильный виджет для использования. Это должно ответить на ваш первый вопрос.
Для второго вопроса. Либо вы реализуете специальный метод для объекта страницы, который возвращает вам другой объект страницы. Что-то вроде этого:
public MyHomePage clickSignon() {
this.mSignon.click();
return new MyHomePage(...);
}
Вы также можете реализовать кнопку в качестве общего класса. Метод нажмите на кнопку виджета:
public <T extends Widget> T click() {
... // coe that makes the click
return new T(...);
}
Заявление члена внутри страницы входа:
private Button mSignon<MyHomePage>;
Таким образом, вы можете написать:
MyHomePage hp = loginPage.getSignon().click();
Либо вы реализуете фабрику страницы объект. Завод может определить текущее состояние экрана и вернуть вам страницу, соответствующую тому, что вы видите. Вы можете определить это, пытаясь найти какой-то определенный элемент на экране (т. Е. Кнопка для входа в систему присутствует только на странице входа).
Отнюдь не окончательный ответ, но я надеюсь, что он уже дал вам направление. Не стесняйтесь оставлять вопрос в комментарии, и я обновлю этот ответ.
Проблема, которую я предвижу это в целом будет иметь те же провалы, как делать записи и воспроизведения инструменты , Они будут генерировать ужасные селектора и код мусора, который можно сделать намного лучше вручную. – Arran
@Arran Вы можете создать XPATH для каждого элемента, взяв его имя тега и все атрибуты этого элемента. –