本周的NuGet包:F# 框架的Canopy web 测试

[原文发表地址] NuGet Package of the Week: Canopy Web Testing Framework with F#

[原文发表时间] 2014 –5-25

最近我一直在探索自动化浏览器测试,并且由于一些不相关的原因退出了F#。然而,当你结合自动化浏览器和F#,你会想到 “canopy”.“canopy”是“F# rictionless 网页测试”框架,它结合了Selenium的灵活性和F#语言的简洁性。F#比C#更简洁。 并且引起很多.NET 源代码开发组织的关注。人们正在为自己创造基于F#这种特定语言的领地。

你已经拥有F#,或者你已经在用F#,但却没有意识到。如果你真没有,这里有很多免费得到F#的方法。你可以免费使用VS2013desktop express上带有的F#和Visual F# Tools 3.1.1 .

F#是开源的,并且是跨平台的。它可以在linux, Mac OS X,安卓,IOS和windows系统以及HTML5和GPUs上运行。F#是免费使用的并且拥有OSI认可的源代码许可证。

即使你不想安装任何东西,你现在就可以在浏览器上学习F#。浏览一下: https://www.tryfsharp.org/

也可以浏览FunScript, which is F# to JavaScript!不相信这些?试试Pacman using F# and JavaScriptsource!

image

无论如何,回到Canopy中, 创建一个新的控制台应用程序,并且NuGet在canopy包里。

image

Nuget包将会作为一个基础被引进到Selenium中。

试试我贴在这的“hello wrold”网页测试的例子。

 open canopy
 open runner
 open System
  
 //start an instance of the firefox browser
 start firefox
  
 //this is how you define a test
 "taking canopy for a spin" &&& fun _ ->
     //this is an F# function body, it's whitespace enforced
  
     //go to url
 //these are similar to C# using statements
     url "https://lefthandedgoat.github.io/canopy/testpages/"
  
     //assert that the element with an id of 'welcome' has
     //the text 'Welcome'
     "#welcome" == "Welcome"
  
     //assert that the element with an id of 'firstName' has the value 'John'
     "#firstName" == "John"
  
     //change the value of element with
     //an id of 'firstName' to 'Something Else'
     "#firstName" << "Something Else"
  
     //verify another element's value, click a button,
     //verify the element is updated
     "#button_clicked" == "button not clicked"
     click "#button"
     "#button_clicked" == "button clicked"
  
 //run all tests
 run()
  
 System.Console.WriteLine("press [enter] to exit")
 System.Console.ReadLine() |> ignore
  
 quit()

很棒,它就可以工作了。 你可以像运行其他.Net的应用程序一样来运行这个.Net 应用程序,就像大多数人说的一样,无论使用什么语言写的,当你发布应用程序的时候都应该包括调试内容。不需要安装F#或者其他的环境到调试机器上。

image

你可以用canopy做各种各样的测试,比如:

 //start a bunch of browsers and switch around
 start firefox
 let mainBrowser = browser
 start chrome
 let secondBrowser = browser
 //switch back to mainBrowser after opening secondBrowser
 switchTo mainBrowser
  
 //take screenshots
 let path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\canopy\"
 let filename = DateTime.Now.ToString("MMM-d_HH-mm-ss-fff")
 screenshot path filename
  
 //get an element
 element "#firstName" |> someParent
  
 //press buttons
 press tab
 press enter
 press down
 press up
 press left
 press right
  
 //check and click things
 check "#yes"
 click "#login"
  
 //or even drag things!
 drag ".todo" ".inprogress"

顺便说一下,canopy库构建它自己使用的是FAKE,我们上周讨论过的F#的构建系统!去看看这些项目并提出帮助或者支持。最近,在.Net上有很多有趣的开放资源, 那些可能是不太引人注意。

相关链接: