有没有人有用函数式语言编写UI自动化的例子或经验?我目前正在学习F#以更好地理解功能概念,而我很难弄清楚如何使用函数式语言构建自动化UI测试 - 似乎很容易使用与Java相同的页面/屏幕对象模式或C#,但由于缺乏经验,我很好奇,如果我错过了不同的方法。
答案 0 :(得分:11)
使用功能语言的最大胜利来自根本不需要使用课程,但能够在他们是正确的答案时。此外,由于类型推断和语法,F#允许一个漂亮的干净的'dsl'外观测试套件。常见操作(例如:登录)很容易抽象为函数并在测试中调用。任何非常特定于页面的函数都可以添加到该页面的模块及其定义功能(css选择器等)。
以下是使用canopy
编写的测试示例test(fun _ -> //description of the test describe "registering a user" //go to root url "/" //ensure that you are on the login page on "/Account/LogOn" //click the registration link click "form a[href='/Account/Register']" //verify that you were redirected on "/Account/Register" //set the value of the input to email address specified "#Email" << "username@example.com" //set the value of the input to "Password" "#Password" << "Password" //set the value of the input to "PasswordConfirmation" "#PasswordConfirmation" << "Password" //click the register button click "input[value='register']" //verify that you were redirected on "/" //log off after test url "/account/logoff" )
我在F#中编写了一个Web自动化框架/库(在Ruby中也是一个),到目前为止,虽然我不认为它的样式是功能性的,但它没有任何类。几乎所有东西都是功能。您的测试套件是运行的函数列表。
使用&lt; 500 LoC只有3个模块,主要与您的页面交互的功能集,简单的测试运行器和一些配置变量。在这一点上,这种范式对我来说非常有效。我没有使用类来进行页面定义,因为对我来说,页面定义就像我使用的css选择器一样。具有一堆值的模块可以很好地满足这一需求。
试一试,我认为你会发现它是实现目标的绝佳方式。
抱歉第一次发布所以它不会让我显示更多链接。查看github,您可以在/canopy/canopy/canopy.fs
中查看源代码答案 1 :(得分:0)
你似乎回答了自己的问题,F#支持OOP,在这种情况下OOP非常适合,在这种情况下,命令与功能之间的区别与结构是分开的。
因此,就像在C#中一样使用类和方法,但是以功能方式编写单元测试。