- 2016.3.23更新:多個工程依賴報錯處理
之前在團隊實施過 Calabash-Cucumber 自動化測試,最近項目又在使用。其中遇到一些問題,在此總結。
設置執行案例的模擬器
Cucumber 有一個配置文件,在執行 Cucumber 運行案例時,首先會調用此文件。
在Cucumber執行的目錄,即 features 目錄同級,建一個.config(隱藏文件,在終端裏使用命令)目錄。config目錄下,新建一個 Cucumber.yml文件 將如下內容copy 至此文件保存:
default: -r features -r features_ios_support --tags ~@wip --tags ~@manual --tags ~@ignore --tags ~@stg --tags ~@android_only DEVICE_TARGET='iPhone 6 (8.1 Simulator)'
- -r:加載目錄 可以指定加載順序,ruby 特性後加載的類的方法會將先加載的覆蓋
- –tags:可以給指定案例添加 tag 執行時,只執行選定 tag
- DEVICE_TARGET:指定使用哪個版本的模擬器運行案例,如果是真機直接寫 DeviceID
可以使用如下命令查看本機設備列表:
➜ ~ instruments -s devices
Known Devices:
Rigel.Xu (8.4) [cac0899307dfb6f6bec507fcad641fe6b76ca3c9]
iPad Retina (8.4 Simulator) [ACFDE3E0-85F8-4DC3-A6A5-7537769F0CE3]
iPhone 6 (8.1 Simulator) [11CA78D9-395D-4FBE-9347-6B3CC20B75AC]
iPhone 6 Plus (8.4 Simulator) [85C3A98F-BDBB-4BBF-A485-D2301E4ED5BA]
多個.xcodeproj依賴
有的工程可能會直接把其它工程做爲一個庫導入進來, 這時運行cucumber時就會報如下錯誤:
Found multiple .xcodeproj directories:
/Users/xxx/AAA.xcodeproj
/Users/xxx/BBB.xcodeproj
Which project contains the target of the application you are trying to test?
Set the XCODEPROJ variable to specify the correct .xcodeproj directory.
# Examples
$ XCODEPROJ="../MyApp.xcodeproj" cucumber
$ XCODEPROJ="iOS/MyApp.xcodeproj" cucumber
(RunLoop::MultipleXcodeprojError)
./features/support/01_launch.rb:28:in `Before'
這是因爲cucumber檢測到在工程目錄下有兩個工程文件 , 這時也需要修改.yml 文件, 在每個設置的後面添加XCODEPROJ字段, 指定你需要測試的工程:
XCODEPROJ="../你的工程.xcodeproj"
或者,在每次執行cucumber的時候, 帶上XCODEPROJ參數:
XCODEPROJ="你的工程.xcodeproj" cucumber
webView操作及滾動
使用scoll(“webView”) 是無法滾動 webView 的,在 Calabash 的 GoogleGroup 裏查到可以使用 swipe 來滾動,親測可用swipe :up, offset:{x:100,y:250}外 webView 操作某一元素可以使用如下方式:
touch("webView css:'img#banner1'")
css之後是 css 的選擇器,爲使我們的測試腳本寫起來方便,建議在web 頁面開發的時間爲不同的控件使用不同的 id 。
查看 Calabash 源碼
安裝完 Calabash-Cucumber 後,可以在對應 ruby 的 gems 裏找到相應版本的 Calabash-Cucumber,如:
ruby-2.2.2/gems/Calabash-Cucumber-0.14.3
使用編輯器打開整個目錄,可以看到如下結構:
bin
doc
dylibs
features
features-skeleton
lib
LICENSE
scripts
staticlib
Calabash 的所有東西,都在這裏了,核心源碼在 lib/Calabash-Cucumber 目錄下,有時如果不知道一些命令,或者查不到解決方法,可以直接看源碼。
附: