Automation tests 5 — Code Architecture 之三

再承上,來講這張圖的最下面





Driver 層


這部分完全就是操作了。在cucumber 系列,要對螢幕上的 view 物件做這些操作,你會需要知道對哪個物件操作,通常可以用它的 marked 或是 id 來下 query,(在web上,通常是用 XPATH當作 id 使用),就可以拿到 view 物件,再去操作就可以了。

一般而言,在做 automation 的時候,主要大概就是三個動作:

  • 點擊:找到某個 view 物件,去點他

  • 取得螢幕上的文字

  • 輸入:對某個 view 物件輸入一些文字


所有這些操作,我們都拉出來放在獨立的檔案裡面。


Android 的基本操作


  • 點擊:

因為啊, Android 的 find 機制是只能找在螢幕可視範圍內出現的 view 物件,所以假如在畫面內找不到,就要往下 drag 一點,再找一次.... 如此一直重複,直到找不到為止。

然後有時候,Android App 的關係吧,點了以後好像事件會沒吃到,所以又多寫了一點邏輯,變成了 find_and_click_for_good。

  • 取得文字:


這裡要注意的是,query 出來的東西是一個 array of hashes,所以要用有點難懂的存取方式去拿到 array 裡面的第一個 hash 的 key 是 ‘text’ 的 value。哈哈,繞口令齁~在目前我們用到的所有測試中,都是在比較價錢的文字,所以,後面的 text.sub! 的操作,都是把金錢符號啊、可能的逗號與空白拿掉而已。


  • 輸入:


也是一樣, Android 的 find 機制是只能找在螢幕可視範圍內出現的 view 物件,所以假如在畫面內找不到,就要往下 drag 一點,再找一次.... 如此一直重複,直到找不到為止。


  • 底層的 API:


所有底層的 calabash-android 的 API,都可以在這個連結與目錄中找到:

https://github.com/calabash/calabash-android/blob/master/ruby-gem/lib/calabash-android/touch_helpers.rb

https://github.com/calabash/calabash-android/blob/master/ruby-gem/lib/calabash-android/wait_helpers.rb

https://github.com/calabash/calabash-android/tree/master/ruby-gem/lib/calabash-android/steps

最底層最底層的 API 在:

http://www.rubydoc.info/gems/calabash-android/Calabash/Android/Operations


iOS的基本操作

  • 點擊:

因為 iOS 的 query 跟 android 運作方式不同,他是找整個螢幕上的 view 物件,包括在可是範圍外的,也可以被 query 得到,所以在 iOS 上就不用一直往下 drag 了。

  • 取得文字

同 Android,一模模一樣樣!有沒有?我們當初就是直接 reuse 了這些 code。不用再寫一次。為什麼可以這樣 re-use 之後會講。

  • 輸入:

就直接呼叫 set_text,例如,在 search_input_page 裡面:


  • 底層的 API:


底層的 API 可以在這裡跟相關的目錄與文件找到:

http://calabashapi.xamarin.com/ios/Calabash/Cucumber/Operations.html


mWeb的基本操作


  • 點擊:



  • 取得文字:


  • 輸入:

就直接呼叫 set_text


  • 底層的 API


mobile web 跟 web automation 底層是差不多的,你可以參考:

https://github.com/selenium-cucumber/selenium-cucumber-ruby/blob/master/lib/selenium-cucumber/methods/click_elements_methods.rb

跟這整個 github repo 的目錄~


XPATH tricks

為了提升 mWeb 的 XPATH 的可讀性,可以偷用 XPATH 的結構來做手腳,請見 Tony 的文章:

https://tonyspostitnote.wordpress.com/2017/05/26/find-selenium-xpath/#more-563

https://tonyspostitnote.wordpress.com/2017/05/31/1532/#more-651

留言