Автоматизация пользовательского интерфейса с функциональными языками
У кого-нибудь есть примеры или опыт написания автоматизации пользовательского интерфейса на функциональном языке? В настоящее время я изучаю 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#, но сами пишите модульные тесты.