Автоматизация пользовательского интерфейса с функциональными языками

У кого-нибудь есть примеры или опыт написания автоматизации пользовательского интерфейса на функциональном языке? В настоящее время я изучаю F#, чтобы лучше понять функциональные концепции, и мне трудно понять, как автоматизированный тест пользовательского интерфейса будет структурирован на функциональном языке - кажется, легко использовать те же шаблоны страниц / экранных объектов, которые я использовал в Java или C#, но, учитывая недостаток опыта, мне любопытно, есть ли другой подход, который я пропустил.

2 ответа

Решение

Ваша самая большая победа с использованием функционального языка будет заключаться в том, что вы вообще не будете использовать классы, а сможете, когда они будут правильным ответом. Кроме того, F# допускает хороший чистый набор тестов "dsl" благодаря выводу типа и синтаксису. Общие действия (пример: вход в систему) легко абстрагируются в функцию и вызываются в тесте. Любая функция, которая очень специфична для страницы, может быть добавлена ​​в модуль этой страницы вместе с ее определяющими функциями (селекторы CSS и т. Д.).

Вот пример теста, написанного навесом

тест (весело _ ->
    // описание теста
    опишите "регистрация пользователя"

    // перейти к корню
    URL "/" 

    // убедитесь, что вы находитесь на странице входа
    на "/ Аккаунт / LogOn" 

    // нажмите на ссылку регистрации
    нажмите "сформировать [href='/Account/Register']" 

    // проверить, что вы были перенаправлены
    на "/ Аккаунт / Регистрация" 

    // устанавливаем значение ввода в указанный адрес электронной почты
    "#Email" << "username@example.com"

    // установить значение входа в "Пароль"
    "#Password" << "Пароль" 

    // установить значение ввода в "PasswordConfirmation" 
    "#PasswordConfirmation" << "Пароль" 

    // нажимаем кнопку регистрации
    нажмите "input[value='register']" 

    // проверить, что вы были перенаправлены
    на "/" 

    // выйти из системы после теста
    url "/account/logoff")

Подробнее о навесе

Я написал фреймворк / библиотеку для веб-автоматизации на F# (также на Ruby) и до сих пор, хотя я не считаю его стиль функциональным, в нем нет классов. Почти все это функция. Ваш набор тестов представляет собой список выполняемых функций.

страница github
Некоторые примеры

При < 500 LoC есть только 3 модуля, основной набор функций для взаимодействия с вашей страницей, простой тестовый прогон и некоторые переменные конфигурации. На данный момент эта парадигма сработала очень хорошо для меня. Я не использую классы для определения страниц, потому что для меня определение страницы - это просто селекторы CSS, которые я использую. Модуль с кучей значений прекрасно справляется с этой задачей.

Попробуйте, я думаю, вы найдете это отличным способом для достижения ваших целей.

Извините за первый пост, так что я не буду показывать больше ссылок. Посмотрите на github, и вы можете увидеть источник в /canopy/canopy/canopy.fs

Похоже, вы отвечаете на свой вопрос: F# поддерживает ООП, ООП хорошо подходит в этом случае, и различие между императивом и функционалом в этом случае отличается от структуры.

Так что используйте классы и методы так же, как в C#, но сами пишите модульные тесты.

Другие вопросы по тегам