selenium 中文文檔
這里主要集中了 Selenium 官網的所有文檔,和項目 Wiki 中的部分文檔翻譯。
希望這些文檔能幫助大家更好的了解 Selenium 的工作原理,而不僅僅是會使用那些客戶端驅動的 API.
介紹
用于網站應用的測試自動化
如今,大多數軟件應用都是跑在瀏覽器中的網站應用。不同公司和組織之間的測試效率迥異。在這個富交互和響應式處理隨處可見的時代,很多組織都使用敏捷的方式來開發,因此測試自動化也成為軟件項目的必備部分。測試自動化意味著使用軟件工具來反復運行項目中的測試,并為回歸測試提供反饋。
測試自動化有很多優點。大多數都和測試的可重復性和高執行效率這兩點相關。市面上有一些商業或開源的同居來輔助測試自動化開發。Selenium 應該是最廣泛使用的開源方案。本文檔將幫助新手和有經驗的使用者學習為網站應用創建測試自動化的有效技術。
本文檔介紹了 Selenium,其細節和從社區中積累的最佳實踐。其中包含很多范例。同時,也將提及 Selenium 的一些技術細節和推薦用法。
對于一個軟件團隊的測試過程來說,測試自動化具有提高長期效率的優勢。測試自動化包括:
- 頻繁的回歸測試
- 快速反饋
- 幾乎無限制的測試用例迭代執行
- 支持敏捷和極限編程
- 遵循測試用例的文檔
- 自定義缺陷報告
- 能找出手工測試中沒發現的缺陷
自動化?或不自動化?
自動化是否總是好的?什么時候我們應該使用自動化的方式來測試?
自動化測試不總是有優勢的。這里有一些場景就更適合手工測試。例如,如果一個應用的接口在不久的將來會發生變化,那時所有的測試用例都需要重寫。有時僅僅是因為沒有足夠的時間來實現測試自動化。短期來說,手工測試更快捷。如果一個應用的發布日是掐死的,而又沒有可用的自動化測試,而測試工作又必須在指定時間內完成,那么此時手工測試也是最佳選擇。
介紹 Selenium
Selenium 是一組軟件工具集,每一個都有不同的方法來支持測試自動化。大多數使用 Selenium 的QA工程師只關注一兩個最能滿足他們的項目需求的工具上。然而,學習所有的工具你將有更多選擇來解決不同類型的測試自動化問題。這一整套工具具備豐富的測試功能,很好的契合了測試各種類型的網站應用的需要。這些操作非常靈活,有多種選擇來定位 UI 元素,同時將預期的測試結果和實際的行為進行比較。Selenium 一個最關鍵的特性是支持在多瀏覽器平臺上進行測試。
Selenium 項目簡史
Selenium 誕生于 2004 年,當在 ThoughtWorks 工作的 Jason Huggins 在測試一個內部應用時。作為一個聰明的家伙,他意識到相對于每次改動都需要手工進行測試,他的時間應該用得更有價值。他開發了一個可以驅動頁面進行交互的 Javascript 庫,能讓多瀏覽器自動返回測試結果。那個庫最終變成了 Selenium 的核心,它是 Selenium RC(遠程控制)和 Selenium IDE 所有功能的基礎。Selenium RC 是開拓性的,因為沒有其他產品能讓你使用自己喜歡的語言來控制瀏覽器。
Selenium 是一個龐大的工具,所以它也有自己的缺點。由于它使用了基于 Javascript 的自動化引擎,而瀏覽器對 Javascript 又有很多安全限制,有些事情就難以實現。更糟糕的是,網站應用正變得越來越強大,它們使用了新瀏覽器提供的各種特性,都使得這些限制讓人痛苦不堪。
在 2006 年,一名 Google 的工程師, Simon Stewart 開始基于這個項目進行開發,這個項目被命名為 WebDriver。此時,Google 早已是 Selenium 的重度用戶,但是測試工程師們不得不繞過它的限制進行工具。Simon 需要一款能通過瀏覽器和操作系統的本地方法直接和瀏覽器進行通話的測試工具,來解決Javascript 環境沙箱的問題。WebDriver 項目的目標就是要解決 Selenium 的痛點。
跳到 2008 年。北京奧運會的召開顯示了中國在全球的實力,大規模的次貸危機引發了“大蕭條”以來美國最大的經濟危機。但是當年最重要的故事是 Selenium 和WebDriver 的合并。Selenium 有著豐富的社區和商業支持,但 WebDriver 顯然代表著未來的趨勢。兩者的合并為所有用戶提供了一組通用功能,并且借鑒了一些測試自動化領域最閃光的思想。或許,關于兩者合并的最好解釋,是由 WebDriver 的開發者,在 2009 年 8 月 6 日發出的一封給社區的聯合郵件中提到的:
為什么這兩個項目要合并?一部分是因為 WebDriver 彌補了 Selenium 的一些短處(例如提供了一組很棒的 API,繞開瀏覽器的限制),一部分是因為 Selenium 彌補了 WebDriver 的一些短處(例如對瀏覽器更廣泛的支持),還有一部分是因為 Selenium 的主要貢獻者和我都認為這樣能為用戶提供最優秀的框架。
Selenium 工具集
Selenium 由多個軟件工具組成,每個具備特定的功能。
Selenium 2 (又叫 Selenium Webdriver)
Selenium 2 代表了這個項目未來的方向,也是最新被添加到 Selenium 工具集中的。這個全新的自動化工具提供了很多了不起的特性,包括更內聚和面向對象的 API,并且解決了舊版本限制。
正如簡史中提到的,Selenium 和 WebDriver 的作者都贊同兩者各具優勢,而兩者的合并使得這個自動化工具更加強健。
Selenium 2.0正是于此的產品。它支持WebDriver API及其底層技術,同時也在WebDriver API底下通過Selenium 1技術為移植測試代碼提供極大的靈活性。此外,為了向后兼容,Selenium 2 仍然使用 Selenium 1 的 Selenium RC 接口。
Selenium 1 (又叫 Selenium RC 或 Remote Control)
正如你在簡史中讀到的,在很長一段時間內,Selenium RC 都是最主要的 Selenium 項目,直到 WebDriver 和 Selenium 合并而產生了最新且最強大的 Selenium 2.
Seleinum 1 仍然被活躍的支持著(更多是維護),并且提供一些 Selenium 2 短時間內可能不會支持的特性,包括對多種語言的支持(Java, Javascript, Ruby, PHP, Python, Perl and C#) 和對大多數瀏覽器的支持。
Selenium IDE
Selenium IDE (集成開發環境) 是一個創建測試腳本的原型工具。它是一個 Firefox 插件,提供創建自動化測試的建議接口。Selenium IDE 有一個記錄功能,能記錄用戶的操作,并且能選擇多種語言把它們導出到一個可重用的腳本中用于后續執行。
注意
雖然 Selenium IDE 有保存功能,能讓用戶以表格的形式保存測試,以供后續的導入和執行,但它不是用于執行你的測試是否通過,也不能創建所有你需要的自動化測試。需要注意的是,Selenium IDE 不能生成含有迭代和條件語句的測試腳本。在本文檔編寫時也沒有要實現該功能的計劃。這部分是因為技術原因,部分是因為 Selenium 的開發者所推薦的自動化測試的最佳實踐常常是需要編寫一些代碼的。Selenium IDE 只是被設計為一個快速的原型工具。Selenium 的開發者推薦選用支持的最好的語言來創建嚴謹、健壯的測試,不管是使用 Selenium 1 還是 Selenium 2.
Selenium-Grid
Selenium-Grid 使得 Selenium RC 解決方案能提升針對大型的測試套件或者哪些需要運行在多環境的測試套件的處理能力。Selenium Grid 能讓你并行的運行你的測試,也就是說,不同的測試可以同時跑在不同的遠程機器上。這樣做有兩個有事,首先,如果你有一個大型的測試套件,或者一個跑的很慢的測試套件,你可以使用 Selenium Grid 將你的測試套件劃分成幾份同時在幾個不同的機器上運行,這樣能顯著的提升它的性能。同時,如果你必須在多環境中運行你的測試套件,你可以獲得多個遠程機器的支持,它們將同時運行你的測試套件。在每種情況下,Selenium Grid 都能通過并行處理顯著地縮短你的測試套件的處理時間。
選擇合適你的 Selenium 工具
很多人都從 Selenium IDE 開始學習使用,如果你不是特別善于編程或者編寫一門腳本語言,你可以通過使用 Selenium IDE 來熟悉 Selenium 命令。使用 IDE,你能在很短的時間內(有時是數秒)創建簡單的測試。
但是我們不推薦你使用 Selenium IDE 來處理所有的測試自動化工作。更高效的做法是,你需要使用它支持的語言創建和運行你的測試,無論是 Selenium 1 還是 Selenium 2。至于選擇什么語言則取決于你的喜好。
在編寫本文檔時,Selenium 的開發者認為Selenium-WebDriver API 才是 Selenium未來的趨勢。但Selenium 1 提供向后兼容。同時,我們也在之前討論了兩者的優勢和劣勢。
我們強烈建議那些初次接觸 Selenium 的用戶通讀這這個章節的內容。那些第一次使用 Selenium ,隨意創建了一些測試套件的用戶,你通常會希望從 Selenium 2 開始,因為這部分是 Selenium 在將來都會持續支持的。
支持的瀏覽器和平臺
在 Selenium 2.0 中,支持的瀏覽器完全取決于你是否使用 Selenium-WebDriver 或 Selenium-RC。
Selenium-WebDriver
Selenium-WebDriver 支持如下瀏覽器,在所有支持這些瀏覽器的操作系統中能都運行良好。
- Google Chrome 12.0.712.0+
- Internet Explorer 6, 7, 8, 9 - 32 and 64-bit where applicable
- Firefox 3.0, 3.5, 3.6, 4.0, 5.0, 6, 7
- Opera 11.5+
- HtmlUnit 2.9
- Android – 2.3+ for phones and tablets (devices & emulators)
- iOS 3+ for phones (devices & emulators) and 3.2+ for tablets (devices & emulators)
注意:
在寫本文檔的時候,一款 Android 2.3 的模擬器被報有bug。但是在 tablet 模擬器和真實設備中均工作良好。
Selenium 1.0 and Selenium-RC
這里是指老的,支持 Selenium 1 的部分。它也適用于 Selenium 2 版本中的 Selenium RC。
Browser | Selenium IDE | Selenium 1 (RC) | Operating Systems |
Firefox 3.x | Record and playback tests | Start browser, run tests | Windows, Linux, Mac |
Firefox 3 | Record and playback tests | Start browser, run tests | Windows, Linux, Mac |
Firefox 2 | Record and playback tests | Start browser, run tests | Windows, Linux, Mac |
IE 8 | Test execution only via Selenium RC* | Start browser, run tests | Windows |
IE 7 | Test execution only via Selenium RC* | Start browser, run tests | Windows |
IE 6 | Test execution only via Selenium RC* | Start browser, run tests | Windows |
Safari 4 | Test execution only via Selenium RC | Start browser, run tests | Windows, Mac |
Safari 3 | Test execution only via Selenium RC | Start browser, run tests | Windows, Mac |
Safari 2 | Test execution only via Selenium RC | Start browser, run tests | Windows, Mac |
Opera 10 | Test execution only via Selenium RC | Start browser, run tests | Windows, Linux, Mac |
Opera 9 | Test execution only via Selenium RC | Start browser, run tests | Windows, Linux, Mac |
Opera 8 | Test execution only via Selenium RC | Start browser, run tests | Windows, Linux, Mac |
Google Chrome | Test execution only via Selenium RC | Start browser, run tests | Windows, Linux, Mac |
Others | Test execution only via Selenium RC | Partial support possible** | As applicable |
* 在 Firefox 上通過 Selenium IDE 開發的測試,可以通過簡單的 Selenium RC 命令行在任意支持的瀏覽器上運行。
** Selenium RC 服務器能開啟任何可運行的測試。但根據瀏覽器的安全設置,可能會有部分特性不可用。
靈活性和可擴展性
你將發現 Selenium 是高度靈活的。你有很多方式為 Selenium 的測試腳本和 Selenium 框架添加功能來定制你的自動化測試。同其他的自動化工具相比,Selenium 可能是最強的。定制相關的內容貫穿整個文檔有多處提及。另外,Selenium 是開源的,它的源碼可以下載和修改。
本文檔包含哪些內容?
本文檔同時面向于新手和那些希望了解更多的 Selenium 用戶。我們向新手介紹 Selenium,我們并不要求你對 Selenium 非常了解,但你至少需要知道一些自動化測試的基本知識。對于那些經驗豐富的用戶來說,本文檔可作為一個使用參考。如果真的非常熟悉,我們建議你瀏覽一下每個章節和其副標題。我們提供了 Selenium 的架構信息,常見用法的例子和一章關于測試設計的內容。
剩下的章節將講述以下內容:
Selenium IDE
介紹 Selenium IDE 以及如何使用它創建測試腳本。如果你缺乏編程經驗,但仍然希望學習測試自動化,那么從本章開始入手是個不錯的主意,并且你將會發現自己能通過 Selenium IDE 創建不少的測試用例。如果你編程經驗豐富,但你希望使用 Seleinum IDE 快速創建測試原型的話,這一章對你也很有用。本章還將向你演示如何導出指定語言的測試腳本,以添加更多 Selenium IDE 不能支持的功能。
Selenium 2
解釋如何通過 Selenium 2 創建自動化測試項目。
Selenium 1
解釋如何通過 Selenium RC API 開發一個自動化測試項目。我們使用了多種語言來進行代碼演示。同時包括了如何安裝 Selenium RC 的內容。Seleium RC 支持的各種模式、配置也將會介紹,包括它們的限制和如何進行權衡。我們還提供了架構圖來幫助演示這些點。對于 Selenium RC 新手來說,一些常見問題的解決方案也列在其中,例如,操作安全證書, HTTPS 請求,彈出框和打開新窗口。
測試設計
這個章節介紹了使用 Selenium WebDriver 和 Selenium RC 的編程技巧。我們還演示了論壇中常被問道的技巧,例如如何設計 setup 和 teardown 方法,如何實施數據驅動測試(每次測試通過數據都有數據發生變化)和其他一些常見的測試自動化任務的編程方法。
Selenium-Grid
這部分內容未完成。
User extensions
講述如何修改、擴展和定制 Selenium。
https://github.com/fool2fish/selenium-doc