緣起
最近參加與 TDD 相關的一門課程, 其中在 Web Test 的部份, 採用 Selenium IDE, 這是一套 Firefox 的 plug-in, 但是它所產生的 script, 就不是只能在 Firefox 上執行, 可以針對不同語言的 Test Framework 匯出不同的 script, 例如: C# / NUnit / WebDriver, C# / NUnit / RemoteControl.參考一些網誌, 大部份都用 Google Search 作開場, 但經實測發現, 並無法如\順利運作 ...
由於對 Selenium IDE 的操作很不熟悉, 所以將課後練習的部份, 留下記錄, 避免以後忘記..
一個最簡單的例子--Google Search, 但不能 Working
真的無法 Working, 測試過程停留在 clickAndWait 30 秒後, 出現 time out 的狀況, 這到底怎麼一回事?一個最簡單的例子--Google Search, 嚐試找問題及解決
在 Google 爬了很久, 終於找到一篇 Testing Ajax Applications with Selenium, 其原因為 Ajax 運作造成的.
原來 clickAndWait 這個 Selenium 的 command, 必須等待頁面 reload 才會觸發; 而 Ajax 並不會發生頁面 reload 的狀況, 所以, 會造永久的等待, 最後 time out.
查了一下 Google Search 那個 button 的程式碼, 如下, Google 加了一個自定義的 attribute, 叫作 jsaction, 還沒有時間去作 trace, 因此, 不是很確定是否也是 Ajax; 但至少以下2個方案都是可解決 time out 的問題. 有時間再查 ...
查了一下 Google Search 那個 button 的程式碼, 如下, Google 加了一個自定義的 attribute, 叫作 jsaction, 還沒有時間去作 trace, 因此, 不是很確定是否也是 Ajax; 但至少以下2個方案都是可解決 time out 的問題. 有時間再查 ...
<div class="jsb" style="padding-top:2px"> <center> <input value="Google 搜尋" name="btnK" type="submit" jsaction="sf.chk"> <input value="好手氣" name="btnI" type="submit" jsaction="sf.lck"> </center> </div>
第1個方案是比較粗糙的, 每台主機的狀況不同, 也許當主機很忙時, pause 的毫秒 (ms) 數就要增加, 所以並不是很適合的方式.
方案一: 採用 click + pause + assertTextPresent
方案二: 採用 click + waitForTextPresent
產生測試案例之後 ...
由於上述的測試案例係只能在 Firefox 上面運作; 如果想要跟 Visual Studio 的 MSTest 合作, 該如何處理呢? 可以參考 91 前輩撰寫的 [Tool][Selenium IDE]Export to C#/WebDriver/MSTest 的文章說明. 摘要如下:
1. 建立 C#/WebDriver/MSTest 的 Formatter //參考前述連結的說明
2. 在 Selenium IDE 選取(double click) 要進行的測試案例, 例如: TC03-GoogleSearch-傑士伯-v3
3. 在 Selenium IDE 選取 File > Export Test Cases As… >步驟1建立的 MSTest 的 Formatter 範本, 即可產生 MSTest 所需的 C# code
4. 將步驟3的 C# code, 貼到已建立的測試方法.
5. 在 Visual Studio 執行步驟4 的測試方法, 將會呼叫 Firefox 進行測試.
以下作一些截圖, 並加上注意事項; 您可以自行找一個 ASP.NET MVC 或 Web Form 的網頁作一下練習:
1. 加入一個測試專案
2. 利用 Nuget 加入以下2個套件的參考
3. 在測試專案裡, 加入一般的 類別 即可; 不需要加入 "測試類別"
4. 將 Selenium IDE 匯出的 MSTest C# Code, 直接貼到該新加入的類別上
5. 請將 class 設為 public, 不然 "測試總管" 抓不到
6. 執行測試時, 請注意 Web Application是否運作中, 如果沒有, 測試將會失敗
以下作一些截圖, 並加上注意事項; 您可以自行找一個 ASP.NET MVC 或 Web Form 的網頁作一下練習:
1. 加入一個測試專案
2. 利用 Nuget 加入以下2個套件的參考
- Selenium WebDriver
- Selenium WebDriver Support Classes
3. 在測試專案裡, 加入一般的 類別 即可; 不需要加入 "測試類別"
4. 將 Selenium IDE 匯出的 MSTest C# Code, 直接貼到該新加入的類別上
5. 請將 class 設為 public, 不然 "測試總管" 抓不到
6. 執行測試時, 請注意 Web Application是否運作中, 如果沒有, 測試將會失敗
總結
Selenium IDE 真的是很好用的工具, 但因為不熟悉, 再加上一直無法完成 Google Search 這個入門案例, 花了不少功夫; 最後終於還是完成了.參考文件
- [Tool][Selenium IDE]Export to C#/WebDriver/MSTest : 91 前輩撰寫的 C# WebDriver for MSTest
- Selenium IDE 下載
- Web UI 測試的好幫手 - Selenium
- 網頁應用程式測試工具Selenium IDE介紹
- CI Server 23 - 使用Selenium進行瀏覽器自動化測試
- Testing Ajax Applications with Selenium
沒有留言:
張貼留言