2013-07-25 31 views
3

我試圖打破我的UIAutomation測試腳本成塊,使之可以運行他們在同一時間或全部一個拼湊。所以我有一個結構:在UIAutomation鏈接#imports的JavaScript

全tests.js:

#import "tab-dates.js" 
#import "tab-temperatures.js" 

製表dates.js:

#import "../../../Libraries/tuneup_js/tuneup.js" 
#import "dpl_assertions.js" 

var target = UIATarget.localTarget(); 
var app = target.frontMostApp(); 

test("Verify date view is shown", function() { 
    assertEquals(tabBar.selectedButton().name(), "Date"); 
}); 

這兩個生活在同一個目錄中,並導入到自動化跟蹤文件,也位於同一目錄中。

當我直接運行製表dates.js,一切都很好。找到tuneup.js,路徑是正確的,測試通過。但是,當我嘗試運行全tests.js,我得到:

Script threw an uncaught JavaScript error: Can't find variable: test on line 8 of tab-dates.js

這不是一條直路的問題,因爲如果我編輯腳本打破路徑,我收到了不同的錯誤,明確表示「沒有文件發現」。

據我所知,鏈接進口是應該工作 - 我的意思是,這是tuneup.js的全部(https://github.com/alexvollmer/tuneup_js):

#import "assertions.js" 
#import "lang-ext.js" 
#import "uiautomation-ext.js" 
#import "screen.js" 
#import "test.js" 
#import "image_assertion.js" 

所以我有一種奇怪的局面是

  • 製表dates.js進口tuneup.js進口test.js => OK
  • 全tests.js進口製表dates.js進口tuneup.js進口test.js => NOT OK

這是怎麼回事?

+1

這是UI自動化中的一個已知錯誤:http://www.openradar.me/12567752 –

+0

一個建議 - 忘記UI自動化,永不回頭。 UI自動化不足以編寫穩定的測試,如果測試不穩定,即使編寫它們也沒有意義。 – Sulthan

回答

0

喬納森佩恩說,這是一個已知的bug,但你可以創建一個導入所有必要的文件,爲您的測試頭文件,然後導入頭文件在任何腳本的運行首先開始。

2

TL; DR運行初始腳本是特殊的。要解決這個問題,創建一個包含正好一個其他腳本的初始腳本,然後這些一般規則:

  • 進口的順序做他們出現在文件
  • 腳本將首先執行,然後就其進口
  • 進口完成深度優先
  • 導入一次腳本不會重新導入

然而,最初的腳本不遵守這些規則。

我花了一些時間創建了四個劇本,搞清楚了這一點:one.js; two.js; three.js和other.js,其中one.js導入two.js;其中導入three.js;它導入one.js並且它們都導入other.js。除了導入,腳本記錄他們的名字,像這樣:

#import "two.js"; 
#import "other.js"; 
UIALogger.logMessage("one.js"); 

如果我然後運行一個。JS,輸出我得到的是

2015-03-04 21:21:20 +0000 Default: two.js 
2015-03-04 21:21:20 +0000 Default: three.js 
2015-03-04 21:21:20 +0000 Default: one.js 
2015-03-04 21:21:20 +0000 Default: other.js 
2015-03-04 21:21:21 +0000 Default: one.js 

然後,我創建了一個名爲launch.js腳本,即進口one.js而已。當我運行此腳本,輸出我得到的是:

2015-03-04 21:27:59 +0000 Default: one.js 
2015-03-04 21:27:59 +0000 Default: two.js 
2015-03-04 21:27:59 +0000 Default: three.js 
2015-03-04 21:28:00 +0000 Default: other.js 
2015-03-04 21:28:00 +0000 Default: launch.js 

由此我們可以推斷:

  • 叫會首先做的進口,那麼最初的腳本執行
  • 初始腳本將重新導入並運行如果由其他腳本進口,恰好一次
  • 進口完成深度優先

所以,使用launch.js策略來減少生活中的痛苦。