Robotium 實戰(833)

weixin_33935777發表於2018-07-24

混合應用_魚大大

    @Test
    fun loginTest() {
        solo.unlockScreen()
        solo.clickOnText("確定")
        solo.clickOnWebElement(By.className("tabbar-user"))
        solo.clickOnText("點選登入")
        solo.enterTextInWebElement(By.xpath("/html/body/div[1]/div[2]/div[2]/div[2]/div/div[1]/div/div/div[2]/input"), "13000000000")
        solo.sleep(1000)
        solo.clickOnWebElement(By.xpath("/html/body/div[1]/div[2]/div[2]/div[2]/div/div[2]/a"))
        solo.enterTextInWebElement(By.xpath("/html/body/div[1]/div[2]/div[2]/div[3]/div/div/input"), "111")
        solo.sleep(1000)
        solo.enterTextInWebElement(By.xpath("/html/body/div[1]/div[2]/div[2]/div[3]/div/div/input"), "1111")
        solo.waitForWebElement(By.xpath("/html/body/div[1]/div[2]/div[2]/div[3]/div/div/input"))
    }

本來想通過id找到控制元件,但是有些web元素要麼沒寫id,要麼層級複雜,總之就是找不到控制元件。
但在chrome的inspect裡面可以很方便的獲取空間的xpath:


6895457-c902b783db290027.png
獲取輸入框的xpath

ctrl + shift + c 然後點選相應空間,inspect 會自動定位,在定位的地方右鍵 --> Copy --> Copy xpath即可。


demo

遇到的困難

  • 驗證碼的輸入框是監聽鍵盤輸入的,但是robotium是直接把值copy&paste進入,觸發不了登入邏輯,除了更換成Appium測試,暫且還沒找到解決方案。
  • Robotium 無法跨應用測試,比如我需要拍照或者去系統相簿選擇圖片來上傳圖片,Robotium就無法做到(或者很麻煩?),先試試appium再說。

附錄

Appium和Robotium在對文字框進行輸入時有一定的區別:

  • Appium在輸入文字時需要呼叫系統鍵盤
  • Robotium在輸入文字是根本不需要調出鍵盤,文字很快速的就輸入完成,感覺不是輸入的,而是Copy&Paste

我個人認為造成這種區別的原因應該如下(原始碼分析驗證:TBD):

  • Appium是基於UIAutomator框架實現的。Appium測試程式與目標應用程式是分開的,所以Appium不能直接訪問目標應用的各種element屬性進行copy&paste,而只能模擬觸發相應的事件對目標應用進行操作。這就好比觸控式螢幕監控驅動和目標應用的關係:驅動監控到使用者點選螢幕的事件後,驅動就會去判斷點選的位置是否是一個文字框,如果是的話,就去開啟系統鍵盤給使用者進行輸入。
  • Robotium是基於Instrumentation框架的。Robotium測試程式與目標應用是在同一個程式中作為兩個不同的執行緒執行的。也就是說Robotium測試執行緒是有辦法直接訪問目標應用的各種element屬性的,所以它根本不需要觸發任何事件,直接就可以在內部修改相應的資料,比如這個例子中的文字框輸入文字。

那麼單單針對文字輸入來說,Robotium和Appium優劣如何呢?我個人認為可以從以下幾點出發進行考慮:

  • Robotium是直接Copy&Paste,所以效率當然會更高,特別是在長字串輸入的時候,比如,輸入一篇文章,如果在Appium上呼叫鍵盤,特別當你的安卓設別效能不高的情況下,你會明顯感覺到卡卡的。
  • Robotium因為不需要調出鍵盤,所以很容易就能輸入各種不同語言;而Appium就不一樣了,如果當前英文而你需要輸入中文,那麼你要去呼叫系統setting的應用先去把語言設定成中文,選擇中文輸入法等,然後再切換到目標應用進行輸入操作。
  • Appium更能模擬使用者的行為操作;而Robotium偏向測試金字塔更底層點的Unit Test(所以Robotium除了能支援測試目標應用的Activity外,還能測試Content Provider等)

原文連結