有没有人有用函数式语言编写 UI 自动化的例子或经验?我目前正在学习 F# 以更好地理解功能概念,但我很难弄清楚如何用功能语言构建自动化 UI 测试 - 似乎很容易使用与 Java 中相同的页面/屏幕对象模式或 C#,但由于缺乏经验,我很好奇是否有我错过的不同方法。
2 回答
使用函数式语言的最大胜利将来自根本不必使用类,而是能够在它们是正确答案时使用。此外,由于类型推断和语法,F# 允许一个漂亮干净的“dsl”外观测试套件。常见的操作(例如:登录)很容易被抽象为一个函数并在测试中调用。任何特定于页面的功能都可以连同其定义功能(css 选择器等)一起添加到该页面的模块中。
这是一个用canopy编写的测试示例
测试(有趣_->
//测试说明
描述“注册用户”
//进入根目录
网址“/”
//确保你在登录页面
在“/帐户/登录”上
//点击注册链接
点击“form a[href='/Account/Register']”
//验证你是否被重定向
在“/帐户/注册”
//将输入的值设置为指定的电子邮件地址
"#Email" << "用户名@example.com"
//将输入的值设置为“密码”
"#密码" << "密码"
//将输入的值设置为“PasswordConfirmation”
"#PasswordConfirmation" << "密码"
//点击注册按钮
点击“输入[值='注册']”
//验证你是否被重定向
在 ”/”
//测试后退出
网址“/帐户/注销”
)
更多关于天篷
我已经用 F# 编写了一个 Web 自动化框架/库(也是 Ruby 中的一个),到目前为止,虽然我认为它的风格不是功能性的,但它没有任何类。几乎所有东西都是函数。您的测试套件是一个正在运行的函数列表。
< 500 LoC 只有 3 个模块、与页面交互的主要功能集、一个简单的测试运行器和一些配置变量。在这一点上,这种范式对我来说非常有效。我不使用类来定义页面,因为对我来说,页面定义就像我使用的 CSS 选择器一样简单。具有一堆值的模块很好地满足了这一需求。
试一试,我认为您会发现这是实现目标的绝佳方式。
抱歉第一次发帖,所以它不会让我显示更多链接。在 github 上查看,你可以在 /canopy/canopy/canopy.fs 看到源代码
您似乎回答了您自己的问题,F# 支持 OOP,OOP 在这种情况下非常适合,并且在这种情况下,命令式与函数式之间的区别与结构是分开的。
因此,就像在 C# 中一样使用类和方法,但以功能方式编写单元测试本身。