3

有没有人有用函数式语言编写 UI 自动化的例子或经验?我目前正在学习 F# 以更好地理解功能概念,但我很难弄清楚如何用功能语言构建自动化 UI 测试 - 似乎很容易使用与 Java 中相同的页面/屏幕对象模式或 C#,但由于缺乏经验,我很好奇是否有我错过的不同方法。

4

2 回答 2

11

使用函数式语言的最大胜利将来自根本不必使用类,而是能够在它们是正确答案时使用此外,由于类型推断和语法,F# 允许一个漂亮干净的“dsl”外观测试套件。常见的操作(例如:登录)很容易被抽象为一个函数并在测试中调用。任何特定于页面的功能都可以连同其定义功能(css 选择器等)一起添加到该页面的模块中。

这是一个用canopy编写的测试示例

测试(有趣_->
    //测试说明
    描述“注册用户”

    //进入根目录
    网址“/”

    //确保你在登录页面
    在“/帐户/登录”上

    //点击注册链接
    点击“form a[href='/Account/Register']”

    //验证你是否被重定向
    在“/帐户/注册”

    //将输入的值设置为指定的电子邮件地址
    "#Email" << "用户名@example.com"

    //将输入的值设置为“密码”
    "#密码" << "密码"

    //将输入的值设置为“PasswordConfirmation”
    "#PasswordConfirmation" << "密码"

    //点击注册按钮
    点击“输入[值='注册']”

    //验证你是否被重定向
    在 ”/”

    //测试后退出
    网址“/帐户/注销”  
)

更多关于天篷

我已经用 F# 编写了一个 Web 自动化框架/库(也是 Ruby 中的一个),到目前为止,虽然我认为它的风格不是功能性的,但它没有任何类。几乎所有东西都是函数。您的测试套件是一个正在运行的函数列表。

github页面
一些例子

< 500 LoC 只有 3 个模块、与页面交互的主要功能集、一个简单的测试运行器和一些配置变量。在这一点上,这种范式对我来说非常有效。我不使用类来定义页面,因为对我来说,页面定义就像我使用的 CSS 选择器一样简单。具有一堆值的模块很好地满足了这一需求。

试一试,我认为您会发现这是实现目标的绝佳方式。

抱歉第一次发帖,所以它不会让我显示更多链接。在 github 上查看,你可以在 /canopy/canopy/canopy.fs 看到源代码

于 2012-08-08T23:27:34.760 回答
0

您似乎回答了您自己的问题,F# 支持 OOP,OOP 在这种情况下非常适合,并且在这种情况下,命令式与函数式之间的区别与结构是分开的。

因此,就像在 C# 中一样使用类和方法,但以功能方式编写单元测试本身。

于 2012-08-08T17:52:35.113 回答