Appium+Robotframework實現iOS應用的自動化測試-6:手勢密碼的解決方案

來源:互聯網
上載者:User

標籤:

手勢密碼在很多應用都會運到,手勢密碼都要求至少串連4個點,但AppiumLibrary並沒有提供對應的關鍵字,本人嘗試連續使用Swipe關鍵字兩次解決該問題,為什麼要用兩次呢?因為Swipe的參數只是起點和終點,如果直接給出手勢密碼的起點和重點,則會忽略中間的點,連續使用兩次Swipe關鍵字在Android中偶爾可以成功,但在iOS中則沒有一次成功過,為了徹底解決該問題,本人仔細看了Appium的文檔,終於所有發現,請看來自於Appium的官方網站的如下:

從中我得知手勢密碼的問題一定可以解決。

Robotframework基於Python,所以也只安裝了Appium的Python用戶端。

由於AppiumLibrary沒有提供手勢密碼關鍵字,那就自己寫一個Library。但是該嘗試失敗了,主要是由於Appium執行中需要很多上下文參數,而自己寫的Library如何與AppiumLibrary互動是個問題,也許可以解決,但可能會比較麻煩。

轉變下觀念,乾脆曲線救國吧。

既然安裝了AppiumLibrary,並且它是開源的,直接去修改其原始碼不就搞掂了嗎?

於是,去到AppiumLibrary安裝的檔案夾,預設會安裝到/Library/Python/2.7/site-packages/AppiumLibrary(Android的我用的是Windows 7進行測試,預設安裝路徑為:C:\Python27\Lib\site-packages\AppiumLibrary\keywords),再到keywords目錄中找到_touch.py檔案,就是它了。

給這個檔案的類_TouchKeywords加上一個方法gesture,具體代碼如下:

 

[python] view plaincopyprint? 
  1. def gesture(self, platform):  
  2.         """ Gesture the element """  
  3.         driver = self._current_application()         
  4.         action = TouchAction(driver)            
  5.         if platform == "iOS":  
  6.             action.press(x=100, y=500).wait(ms=500).move_to(x=600, y=0). \   
  7.                 wait(ms=500).move_to(x=0, y=500).wait(ms=500).release()    
  8.         else:  
  9.             action.press(x=50, y=100).wait(ms=500).move_to(x=150, y=0). \   
  10.                 wait(ms=500).move_to(x=0, y=100).wait(ms=500).release()    
  11.         action.perform()  


該方法的參數platform用於傳入平台,取值為iOS或者Android,這裡有兩個關鍵的知識點:

 

1.press方法中的座標為絕對座標,move_to方法中的座標都是相對座標,具體來說第一個move_to中的座標相對於press方法中的座標,第二個move_to方法中的座標相對於第一個move_to方法中的座標。

2.wait是必須的:開始我沒有用wait,結果效果是划動太快,直接從第一個點到了最後一個店,掠過了中間的點,加上wait之後就正常了。這裡ms表示為毫秒,ms=500就是等待500毫秒。

使用的話很簡單:在iOS中為:Gesture    iOS;在Android中為:Gesture    Android

可能有些人會問為什麼把座標點寫死了,不做為參數傳遞進來呢?

其實我一開始也是把座標作為參數,共用了三組座標分別表示起點,中間的點和終點座標,但執行時總是報錯,也一直找不到原因,後來想到其實手勢密碼是不變的,並不需要改變,乾脆寫成寫入程式碼,如果座標變化了,那就直接改這個檔案即可,反正Python是解釋型的語言,用到的時候會自動編譯,也省去了編譯的麻煩,也是很方便的。

在iOS和Android中都測試通過。

本文中的兩個問題:

1.如何寫一個Library來提供手勢密碼

2.如何把座標作為參數傳遞進來

也請朋友分享下你們的解決方案,歡迎互動討論。

Appium+Robotframework實現iOS應用的自動化測試-6:手勢密碼的解決方案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.