За последний год я создал очень приятную среду WebDriver для своей группы. Довольно стандартная плата за проезд: классы страниц обычно инкапсулируют полную функциональность страницы на нашей платформе (элементы управления как объекты, методы по мере необходимости). & расширяет базовый класс с помощью некоторых глобальных методов, вызывается несколько страниц в тестовых классах JUnit, типичных методах утверждения , яда-яда. Ничего экстравагантного - очень по книгам, но очень функциональный и гибкий.WebDriver PageObjects & Large Количество локаторов
В последнее время, однако, меня попросили использовать фреймворк для автоматизации большого количества страниц с формами, которые могут содержать 100 или более входов, выбрать, параметры и т. Д. Это вызывает у меня серьезное потрясение. Кроме того, идентификаторы многих пользовательских форм управления изменяются от среды к среде (к счастью, они остаются статическими для каждой среды после начальных нажатий). Так или иначе ...
Давайте рассмотрим типичную структуру PageObject, что я использую каждый день:
/** Constructor*/
public someConstructor(WebDriver driver){
super(driver, pageTitle);
}
/**Locators*/
By searchBoxLocator = By.id("phSearchInput");
By searchBoxClearLocator = By.id("phSearchClearButton");
By searchButtonLocator = By.cssSelector("input[value='Search']");
/**Some Methods*/
public void selectFromTabBar(String tabName){
driver.findElement(By.linkText(tabName)).click();
}
public static void enterInputValue(WebDriver driver, By by, String val){
List<WebElement> elements = null;
elements = driver.findElements(by);
if(!elements.isEmpty()){
driver.findElement(by)).sendKeys(val);
}else{
throw new NoSuchElementException("Message");
}
}
Как я уже говорил, ничего экзотического здесь, но теперь мой вопрос к каждому. Возьмите ситуацию, когда у меня не будет традиционного 5-15 байтов на объект PageObject, но вам потребуется более 100 на 10 страниц. Бросьте на усложнение, что они также будут иметь уникальные значения для среды, которая полностью из всех рук и не может быть согласована. Итак, каков подходящий подход здесь ... Я укушу пулю и жесткий код 100 «На странице, я делаю экстернализацию всех файлов By, скажем, Excel, и тянуть все через via, I duno, JXL или что угодно, или я знаю, что это будет статическим и бросить все во внешний файл?
В конце дня я знаю, что нет правильного ответа, но мне просто любопытно, как другие подходят к этому. Прямо сейчас я вытеснил By's для страниц с таким количеством элементов формы и определял элементы управления, которые еще не изменяются внутри объекта PageObject, но он чувствует себя неуклюжим. Возможно, я стремлюсь к слишком высокой элегантности, но любые мысли будут действительно фантастическими.
кажется странным, просто возвращая экземпляр «FooPageTopToolbar» по одному методу в классе FooPage. Я бы предположил, что у большего количества страниц будет панель инструментов. Было бы лучше, чем-то представить это в более OO-стиле? –
@CopyandPaste: Цитата из ответа: «Обратите внимание, что это всего лишь демонстрация, вы также можете рассмотреть возможность наследования, интерфейсов и абстракции для создания ваших объектов страницы. Например, если TopToolbar разделяется многими другими страницами, вам нужно только один класс для всех ». –