2.appium 基礎(chǔ)

啟動

Appium啟動時需要指定一些通用配置,統(tǒng)稱為Desired Capabilities,具體的一些參數(shù)可以參考Appium服務器初始化參數(shù)。這里介紹一些通用的參數(shù)與一些常見的問題。

platformName
手機操作系統(tǒng)

platformVersion
手機操作系統(tǒng)版本

deviceName
手機類型

app
待測app的路徑

appActivity, appPackage
appActivity與appPackage指用于啟動待測app的activityName與packageName,appium(1.6.4)已經(jīng)支持activityName與packageName的自動檢測,這兩個參數(shù)已經(jīng)可以省略了

newCommandTimeout
兩條appium命令間的最長時間間隔,若超過這個時間,appium會自動結(jié)束并退出app

noReset, fullReset
noReset 不要在會話前重置應用狀態(tài)。默認值false。 fullReset (Android) 通過卸載而不是清空數(shù)據(jù)來重置應用狀態(tài)。在Android上, 這也會在會話結(jié)束后自動清除被測應用。默認值false。

unicodeKeyboard, resetKeyboard
在輸入的時候,可能出現(xiàn)鍵盤擋住控件的情況,這時候需要使用 appium 提供的輸入法(支持輸入多語言,沒有鍵盤 ui ),unicodeKeyboard 為 true 表示使用 appium-ime 輸入法。 resetKeyboard 表示在測試結(jié)束后切回系統(tǒng)輸入法。

appWaitActivity, appWaitPackage
appium需要等待的activityName與packageName,與appActivity不同的是,對于有啟動動畫的app來說,appWaitActivity應該是啟動activity消失后出現(xiàn)的activity。這兩個參數(shù)可以指定多個。


控件定位

android sdk的tools目錄下自帶一個元素查看工具uiautomatorviewer,通過這個工具可以獲取到app的各個元素屬性,輔助我們編寫相關(guān)的腳本,uiautomatorviewer的界面如下:


常用的定位方法:
id
使用元素的resource-id屬性定位,如:
driver.find_element_by_id('com.android.calculator2:id/digit1')

class
使用元素的class屬性定位,如:driver.find_element_by_class_name('android.widget.Button')

xpath
定位速度很慢,不推薦。xpath的定位方式很多,這里就不一一敘述了。


基本操作

.click()
點擊操作,一般用在查找元素后面,如:
driver.find_element_by_id('com.android.calculator2:id/digit1').click()

.send_keys
輸入操作,一般用在查找元素后面,如:
driver.find_element_by_class_name('android.widget.EditText').send_keys("123456")

.clear()
清除文本框內(nèi)的所有字段,如:
driver.find_element_by_class_name('android.widget.EditText').clear()

swipe()
滑動操作,如:
driver.swipe(900,1320,180,600,1000)
括號內(nèi)的五個值分別是x坐標的起始位置、y坐標的起始位置、x坐標的目標位置、y坐標的目標位置和滑動時長(毫秒)

wait_activity()
等待activity出現(xiàn)時間,如:
wait_activity('.activity.HomeActivity',5)
括號內(nèi)前面的是要等待的activity,后面的是超時時間,單位是秒。若超過這個時間等待的activity還沒出現(xiàn)就跳過這個命令。


組織用例

unittest是python的一個單元測試框架,它可以幫助我們有效組織用例,把用例的不同部分區(qū)分開來。我們寫一個登錄的測試腳本:


使用的APP
import unittest
from time import sleep
from appium import webdriver

class Login(unittest.TestCase):

    def setUp(self):
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['platformVersion'] = '6.0'
        desired_caps['deviceName'] = 'Huawei'
        desired_caps['appPackage'] = 'com.happy.food'
        desired_caps['appActivity'] = 'com.happy.food.activity.LauncherActivity'
        desired_caps["unicodeKeyboard"] = True
        desired_caps["resetKeyboard"] = True

        url = "http://127.0.0.1:4723/wd/hub"

        global driver
        driver = webdriver.Remote(url,desired_caps)
        sleep(3)

    def test_login(self):
        EditText = driver.find_elements_by_class_name("android.widget.EditText")
        #獲取所有的輸入框
        EditText[0].send_keys("13410066133")
        EditText[1].send_keys("1234567a")
        driver.find_element_by_id("com.happy.food:id/login").click()
        sleep(3)

    def tearDown(self):
        driver.quit()

if __name__ == '__main__':
    unittest.main()

運行腳本:

/Users/yaulola/Public/appium-Android/venv/bin/python /Users/yaulola/Desktop/appium/test.py
.
----------------------------------------------------------------------
Ran 1 test in 42.277s

OK

Process finished with exit code 0

setUp在每條用例前執(zhí)行,
tearDown在每條用例后執(zhí)行,
test_xxx 為要執(zhí)行的用例,必須以test開頭。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容