天天看點

Appium移動端自動化測試-安卓真機+模拟器啟動 - 淺淺水聲

Appium移動端自動化測試-安卓真機+模拟器啟動

一.環境準備

appium-pythin-client版本(0.17),selenium版本(2.53.6)(版本需對應,否則執行腳本可能出錯,我用的是這兩個版本)

macOs版本10.14.1(appium預設不支援該版本,需修改配置檔案),參考:https://blog.csdn.net/yxys01/article/details/73551281

xcode版本10.1

下載下傳SDK解壓後,點選tools檔案裡的android檔案,進行相關安卓版本下載下傳

二.demo代碼

測試檔案代碼:

# coding=utf-8
"""

author:     zhuzhuzhujt
datetime:   2019/3/5 4:09 PM
project:    appuimtest
software:   PyCharm
description:

"""
import os
import unittest
from appium import webdriver
import time
import swipeandroid as sw
# from selenium.webdriver.support.ui import WebDriverWait


# Appium環境配置
PATH = lambda p: os.path.abspath(
    os.path.join(os.path.dirname(__file__), p)
)
# print PATH


class DpAppTests(unittest.TestCase):
    def setUp(self):
        desired_caps = {
            \'automationName\': \'Appium\',
            \'platformName\': \'Android\',
            \'deviceName\': \'192.168.0.55:5556\',
            \'platformVersion\': \'5.1\',
            # apk包名
            \'appPackage\': \'cn.campsg.xuebaketang3.app\',
            # apk的launcherActivity
            \'appActivity\': \'.MainActivity\',
            # 鍵盤相關
            \'unicodeKeyboard\': True,
            \'resetKeyboard\': True,
            # 是否自動啟動
            \'autoLaunch\': True,
            # 可下載下傳位址,如果測試機無該應用會自動進行下載下傳安裝操作
            \'app\': PATH(\'xuebayun.apk\'),
            # 如果測試機已有該應用,不再進行下載下傳安裝操作
            \'noReset\': True
        }
        self.driver = webdriver.Remote(\'http://localhost:4723/wd/hub\', desired_caps)
        # WebDriverWait(self.driver, 30, poll_frequency=0.5, ignored_exceptions=None)

    def tearDown(self):
        self.driver.quit()

    def test_dpApp(self):

        time.sleep(10)
        # 左滑
        sw.swipLeft(500, self.driver)
        # 左滑
        sw.swipLeft(500, self.driver)
        # 模拟定位點選"立即體驗"
        sw.simclick(self.driver, 0.54, 0.89)
        time.sleep(2)
        self.driver.find_element_by_android_uiautomator(\'new UiSelector().text("請輸入學校名稱")\').send_keys(u\'****\')
        time.sleep(1)
        self.driver.find_element_by_android_uiautomator(\'new UiSelector().text("請輸入賬号")\').send_keys(\'***\')
        time.sleep(1)
        self.driver.find_element_by_android_uiautomator(\'new UiSelector().text("•••••")\').send_keys(\'***\')
        time.sleep(1)
        self.driver.find_element_by_android_uiautomator(\'new UiSelector().description("登入")\').click()
        time.sleep(4)


if __name__ == \'__main__\':
    suite = unittest.TestLoader().loadTestsFromTestCase(DpAppTests)
    unittest.TextTestRunner(verbosity=2).run(suite)      

調用方法swipeandroid.py:

# coding=utf-8
"""

author:     zhuzhuzhujt
datetime:   2019/3/6 11:56 AM
project:    appuimtest
software:   PyCharm
description:

"""


def getSize(dr):
   # 擷取螢幕寬高
    x = dr.get_window_size()[\'width\']
    y = dr.get_window_size()[\'height\']
    return x, y


def swipeUp(t, dr):
    l = getSize(dr)
    x1 = int(l[0] * 0.5)
    y1 = int(l[1] * 0.75)
    y2 = int(l[1] * 0.25)
    dr.swipe(x1, y1, x1, y2, t)


def swipeDown(t, dr):
    l = getSize(dr)
    x1 = int(l[0] * 0.5)  # x坐标
    y1 = int(l[1] * 0.25)   # 起始y坐标
    y2 = int(l[1] * 0.75)   # 終點y坐标
    dr.swipe(x1, y1, x1, y2, t)


# 螢幕向左滑動
def swipLeft(t, dr):
    l = getSize(dr)
    x1 = int(l[0]*0.75)
    y1 = int(l[1]*0.5)
    x2 = int(l[0]*0.05)
    dr.swipe(x1, y1, x2, y1, t)


# 螢幕向右滑動
def swipRight(t, dr):
    l = getSize(dr)
    x1 = int(l[0]*0.05)
    y1 = int(l[1]*0.5)
    x2 = int(l[0]*0.75)
    dr.swipe(x1, y1, x2, y1, t)


def simclick(dr, xper, yper):
    # 模拟坐标點選
    l = getSize(dr)
    x1 = int(l[0]*xper)
    y1 = int(l[1]*yper)
    dr.swipe(x1, y1, x1, y1, 1)      

三.真機運作

usb連接配接,開啟開發者選項中的usb調試功能。控制台輸入:adb devices檢視裝置清單

或者通過wifi連接配接,手機和電腦屬于同一網段且能夠ping通,控制台輸入:adb connect 192.168.0.55:5556(預設斷口号5555,可以adb tcpip 5556進行更改),提示連接配接成功後,控制台輸入:adb devices檢視裝置

Appium移動端自動化測試-安卓真機+模拟器啟動 - 淺淺水聲

py代碼參數設定如下:

desired_caps = {
            \'automationName\': \'Appium\',
            \'platformName\': \'Android\',
            \'deviceName\': \'192.168.0.55:5556\',
            \'platformVersion\': \'5.1\',
            # apk包名
            \'appPackage\': \'cn.campsg.xuebaketang3.app\',
            # apk的launcherActivity
            \'appActivity\': \'.MainActivity\',
            # 鍵盤相關
            \'unicodeKeyboard\': True,
            \'resetKeyboard\': True,
            # 是否自動啟動
            \'autoLaunch\': True,
            # 可下載下傳位址,如果測試機無該應用會自動進行下載下傳安裝操作
            \'app\': PATH(\'xuebayun.apk\'),
            # 如果測試機已有該應用,不再進行下載下傳安裝操作
            \'noReset\': True
        }      

打開appium,點選launch打開appium服務後,在pycharm上執行代碼,測試機會自動執行

四.安卓模拟器執行

SDK檔案夾,點選tools檔案裡的android檔案 

1.下載下傳android版本,我這裡下載下傳的是5.1版本 

Appium移動端自動化測試-安卓真機+模拟器啟動 - 淺淺水聲

2.下載下傳完成後,點選菜單欄如下,選擇Manage AVDs

Appium移動端自動化測試-安卓真機+模拟器啟動 - 淺淺水聲

3.點選create,建立模拟器,如圖(具體配置可以自行百度)

Appium移動端自動化測試-安卓真機+模拟器啟動 - 淺淺水聲

4.點選start運作模拟器,此處一開始點選啟動時,報了個未安裝Intel HAXM的error,此時回到 Android SDK Mannager配置頁,選擇extras下如圖的檔案進行安裝

Appium移動端自動化測試-安卓真機+模拟器啟動 - 淺淺水聲

下載下傳成功後,我又試了下start模拟器,仍舊報錯。

此時進入SDK檔案夾,多了個extras檔案夾,點進去選擇intel,一層層進入,會有個兩個安裝檔案,如下圖,我試了第1個未安裝成功,點選第2個檔案提示安裝好後,進入系統安全性與隐私内,把系統阻攔的檔案通路給允許(就因為這個地方導緻一直無法通路intel HAXM)

之後,進入AVM配置頁面,點選start,模拟器成功啟動(特别慢,需要等很久時間),進入系統後顯示如圖

Appium移動端自動化測試-安卓真機+模拟器啟動 - 淺淺水聲

5.修改代碼參數配置處,修改deviceName,模拟器裝置名,可進入控制台輸入:adb devices檢視,如下圖

Appium移動端自動化測試-安卓真機+模拟器啟動 - 淺淺水聲

修改代碼: 

Appium移動端自動化測試-安卓真機+模拟器啟動 - 淺淺水聲

6.打開appium,點選launch,啟動appium服務後,運作代碼檔案

自動下載下傳apk檔案安裝,并自動執行

(注:模拟器過分卡頓,很容易出現應用閃退的情況,之後準備再試一下夜神模拟器上運作的情況)

以上就是Appium自動化測試在真機和模拟器上的運作步驟,下一節,稍微寫一下ios真機及ios模拟器自動運作應用的情況。