воскресенье, февраля 10, 2013

Слайды/Видео к моему докладу на #atdays : За пределами PageObject



Спасибо, уважаемые участники конференции ATDays, за ваш интерес к моему докладу. Готовясь к докладу, я боялся того, что  не смогу настолько просто и понятно донести некоторые темы, как этого хочу.

Но, не смотря на все мои ляпы, растерянность и волнение во время доклада – меня все таки понимали и дополняли с полуслова. А после доклада, я поговорил с множеством людей, которые предлагали свои решения, делились собственным опытом.
А это говорит о том, что на конференции ATDays собрались настоящие профессионалы, люди которым действительно интересна и важна тема автоматизации.

Спасибо вам!

Более полную версию со звуком и видео я планирую опубликовать позже. Скорее всего – значительно позже. Сейчас же делюсь доступными материалами:


Видео

А дальше еще интересней...
Видео: 
Исходный код

Как скачать код? 
Для фанатов 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. Я буду рад ответить  и продолжить дискуссию. 

Комментариев нет: