2012-08-08 36 views
3

有沒有人有用功能語言編寫UI自動化的例子或經驗?我目前正在學習F#以更好地理解功能概念,並且我很難研究如何使用函數式語言來構建自動化的UI測試 - 似乎易於使用與Java中相同的頁面/屏幕對象模式或C#,但由於缺乏經驗,我很好奇,如果有我錯過了不同的方法。使用功能語言的UI自動化

+1

你會如何自動化一個命令式語言的UI測試?自動化UI測試幾乎與您使用的範例無關,因爲無論如何您都可能使用第三方工具來執行此類操作。 – 2012-08-08 12:54:32

+0

您可以查看Web UI的[WebSharper](http://websharper.com/home)和多個[作品](http://www.navision-blog.de/2012/03/22/wpf-designer- for-f /),但總的來說,你的問題表明沒有搜索工作。 – bytebuster 2012-08-08 12:57:25

+0

@Onorio - 實際上,我不太可能使用第三方工具,因此提出這個問題。在一個命令式面向對象的語言中,我將通過創建代表每個頁面/屏幕的對象來構造我的測試,創建代表常見交互的方法並將這些對象用於自動化。可以在我看到的F#中做到這一點,但想知道是否有更好的方法,功能語言允許 – Dave 2012-08-08 15:30:46

回答

11

使用功能性語言的最大勝利將來自根本不需要使用課程,但能夠在正確答案時能夠使用。另外,由於類型推斷和語法,F#允許有一個不錯的clean'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" << "[email protected]" 

    //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#(也一個用Ruby)的Web自動化框架/庫編寫一個測試的例子,迄今,雖然我不認爲它的風格是功能性的,但它沒有任何類。幾乎所有東西都是一個功能。您的測試套件是運行的功能列表。

github page
some examples

隨着< 500控制線只有3個模塊,主要設置的功能與您的網頁,一個簡單的測試運行,以及一些配置變量進行交互。在這一點上,這種範式對我來說非常有效。我不使用類來進行頁面定義,因爲對於我來說,頁面定義就像我使用的CSS選擇器一樣簡單。具有一堆值的模塊很好地滿足了這個需求。

給它一個鏡頭,我想你會發現它是一個很好的方式來實現你的目標。

對不起,第一次發佈所以它不會讓我顯示更多的鏈接。看看github,你可以在/canopy/canopy/canopy.fs看到源代碼。

+0

哇!在SO上16個月,這是你的第一個答案。當然你沒有任何其他隱藏的寶藏? :) – Benjol 2012-08-09 05:36:06

+0

謝謝 - 這就是我一直在尋找的東西 – Dave 2012-08-09 08:46:04

0

您似乎回答了您自己的問題,F#支持OOP,OOP在這種情況下非常合適,並且在這種情況下,命令與功能之間的區別與結構是分開的。所以使用類和方法就像在C#中一樣,但是以功能性的方式編寫單元測試。