
Спасибо, уважаемые участники конференции ATDays, за ваш интерес к моему докладу. Готовясь к докладу, я боялся того, что не смогу настолько просто и понятно донести некоторые темы, как этого хочу.
Но, не смотря на все мои ляпы, растерянность и волнение во время доклада – меня все таки понимали и дополняли с полуслова. А после доклада, я поговорил с множеством людей, которые предлагали свои решения, делились собственным опытом.
А это говорит о том, что на конференции ATDays собрались настоящие профессионалы, люди которым действительно интересна и важна тема автоматизации.
Спасибо вам!
Более полную версию со звуком и видео я планирую опубликовать позже. Скорее всего – значительно позже. Сейчас же делюсь доступными материалами:
Слайды: За пределами Page Object
А дальше еще интересней...
Видео:
- ATDays Часть 01. Кино про одного автоматизатора
- ATDays Часть 02. Как рождаются простыни. Также, в этом посте есть менее быстрая версия этого видео (13 мин)
- ATDays Часть 03. Злой тимлид и магический фреймворк
- ATDays Часть 04. Page Object на основе статических классов
- ATDays Часть 05. Invoke() и цепочка ответственности
- ATDays Часть 06. I Have Expected Controls!
Исходный код
Как скачать код?
Для фанатов git – объяснять не буду
Для тех, кто хочет попробовать git – установите его и через командную строку наберите:
git clone https://github.com/dzhariy/MyPresentations.Slides-n-Source.git
Для ленивых ;)
Зайдите в корень репозитория:
Рядом с кнопкой «Clone in Windows» есть кнопка “Zip” (с облаком) – нажав на нее можно просто скачать весь репозиторий.
Можно воспользоваться и кнопкой «Clone in Windows»
Структура проекта:
- В солюшене WebDriverStarterMSTest находится начальный простыня-код, частично переработанный под статический PageObject.
- Сорлюшн DemoTestWebdriver содержит поэтапное превращение простыни-кода в PageObject
- Сама простыня в файле UnitTest1.cs (да, не очень оригинально)
- Превращение в статический PageObject: StaticPageobject
- Переход от статического к «динамическому» или обычному PageObject: ObjectPageObject
- Добавление Цепочки ответственности и Invoke: InterfacePO_n_Tests
- Добавление IHaveExpectedControls и наследования в тестах: FinalPageObject
Также, возможно вам будет вам будет интересны следующие подходы из папки FinalPageObject:
В файле Pages/ AbstractPageBase.cs добавилась автоматическая инициализация PageObject посредством PageFactory. Т.е. чтобы ваши элементы были проинициализированы – достаточно у наследоваться от AbstractPageBase.
public abstract class AbstractPageBase { public RemoteWebDriver Driver { get { return WebBrowser.Driver; } } public AbstractPageBase() { PageFactory.InitElements(Driver, this); } }
В файле WebBrowser.cs есть метод WaitUntilVisible, который умеет ожидать появления элемента PageObject.
public static void WaitUntilVisible(Func<IWebElement> getElement, int seconds) { WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(seconds)); wait.Until<IWebElement> ( (d) => { try { var element = getElement(); if (element.Displayed) return element; } catch (Exception exceptions) { Console.WriteLine(exceptions.Message); } return null; } ); }
Реализован этот подход посредством замыканий и лямбда выражений, а использование выглядит так (LoginPage.cs):
[FindsBy(How = How.Name, Using = "wpLoginAttempt")] private IWebElement btnLogin; ///... WebBrowser.WaitUntilVisible( () => btnLogin, 10 );
Если что – задавайте вопросы в этом или любом другом топике либо по email. Я буду рад ответить и продолжить дискуссию.
Комментариев нет:
Отправить комментарий