有没有人有用函数式语言编写 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# 中一样使用类和方法,但以功能方式编写单元测试本身。