2011-10-24 69 views
9

我們最近開始使用Selenium測試基於Django的應用程序。測試在Linux上運行良好,但在Mac OS X上運行得很好。我們在這兩種情況下都使用Firefox作爲瀏覽器,並且花了我們一段時間(以及一些運氣)才發現兩種情況之間的重要區別是FF作爲前臺應用程序或作爲背景窗口運行。以下是Linux上發生的事情:如何在Mac OS X上使用Selenium進行測試時強制Firefox成爲前臺應用程序

  1. Selenium告訴Firefox進入用戶註冊頁面。
  2. Selenium填寫用戶名和無效電子郵件地址。
  3. Selenium將焦點從電子郵件地址字段更改爲同一頁面上的另一個字段(它恰好是搜索框,但這並不重要---所有重要的是焦點變化事件)。
  4. 網頁中的Javascript驗證碼注意到電子郵件地址無效,並在頁面中插入錯誤消息。
  5. Selenium檢測到錯誤消息並將測試標記爲已通過。

當我們在Mac OS X上運行,但是,步驟#4不會發生除非我們的測試運行時手動前臺火狐窗口---如果我們離開它在後臺(這是它在默認情況下出現),瀏覽器中的Javascript沒有得到焦點變化事件,所以錯誤信息從未插入到頁面的DOM中,所以Selenium超時等待,測試失敗。

當測試運行時,我們可以強制Selenium前臺瀏覽器,以便我們的Javascript能夠獲得我們想要的事件嗎?如果是這樣,怎麼樣?

+1

你能發表你正在使用的確切代碼嗎? – Amey

回答

2

Selenium通過Javascript驅動瀏覽器。沒有辦法通過JS控制瀏覽器窗口。一般來說,測試Selenium中的'onfocus'和'onblur'事件非常困難。

您可以通過在輸入無效的電子郵件地址後使用Selenium的'runScript'或'getEval'方法進行JS評估來嘗試自己觸發此事件。這不是「純粹的」黑盒測試,即如果驗證的實施發生變化,則需要更改測試,但這是執行此測試的最可行的方法。

+1

是的,從JavaScript或Java無法做到這一點。他們都是沙盒太重。您必須在ObjectiveC或C++中編寫一個本機應用程序來處理焦點,並在啓動Selenium時從JVM調用它。即使這樣做可能也不會很好,因爲窗口管理員經常(正確)不會讓你忘記焦點,因爲它應該由用戶決定。 Pavan說可能唯一可靠的方法就是手動激發焦點事件。 –

相關問題