appium+Python真機運行測試demo的方法
一, 打開手機的USB調試模式
二, 連接手機到電腦
將手機用數據線連接到電腦,並授權USB調試模式。查看連接的效果,在cmd下運行命令:adb devices查看UDID,如下圖所示:
如果有輸出,就表示連接成功。
三, 啟動Appium服務
方法一:cmd命令行啟動
根據查到的UDID啟動appium服務,運行命令:
#>appium -a 127.0.0.1 -p 4723 –U 6207febc --no-reset
-U 參數后面跟的一串字符就是手機的UDID,這個是通過第二步查到的。
當程序輸出如上圖信息的時候,表示appium啟動成功,此時便可以運行測試腳本了。
方法二:appium界面啟動
四, 測試腳本的編寫及運行
真機運行的測試腳本與模擬器上幾乎是相同的,就是有些兒配置不太一樣。具體腳本demo如下demo.py:
#! /usr/bin/env python
#coding=utf-8
import os
import time
import unittest
from selenium import webdriver
from lib2to3.pgen2.driver import Driver
from lib2to3.tests.support import driver
PATH=lambda p:os.path.abspath(os.path.join(os.path.dirname(__file__),p))
desired_caps = {}
desired_caps['platformName'] = 'Android' #設備系統
desired_caps['platformVersion'] = '5.1.2' #設備系統版本
desired_caps['deviceName'] = 'Lenovo P1c72' #設備名稱
desired_caps['app'] = PATH('C:\\Users\\LENOVO\\Desktop\\StarZone_V2.0.0.apk')
#desired_caps['appPackage'] = 'com.xiangchao.starspace'
#desired_caps['appActivity'] = 'com.xiangchao.starspace.activity.SplashActivity'
#如果設置的是app在電腦上的路徑,則不需要配appPackage和appActivity,同理反之
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) #啟動app
time.sleep(5) #啟動app時,需要一定時間進入引導頁,所以必須設置等待時間,不然下面會一直報錯定位不到元素
driver.find_element_by_id('com.xiangchao.starspace:id/skip').click()
driver.quit()
另開一個cmd窗口,運行測試腳本(python demo.py)即可。此時服務端就會有輸出,程序在手機上運行。
注:在測試用例運行過程中,正常情況下手機會自動安裝Settings和Unlock,有些手機有兼容性問題,Settings和Unlock程序打不開,所以每次運行腳本都會提示安裝,按提示允許安裝就可以。
Appium的Desired Capabilities是擴展了webdriver的Desired Capabilities的,下面的一些通用配置是需要指定的:
- automationName:使用哪種自動化引擎。appium(默認)還是Selendroid?
- platformName:使用哪種移動平台。
iOS
,Android
, orFirefoxOS?
- deviceName:啟動哪種設備,是真機還是模擬器?
iPhone Simulator
,iPad Simulator
,iPhone Retina 4-inch
,Android Emulator
,Galaxy S4
, etc... - app:應用的絕對路徑,注意一定是絕對路徑。如果指定了appPackage和appActivity的話,這個屬性是可以不設置的。另外這個屬性和browserName屬性是沖突的。
- browserName:移動瀏覽器的名稱。比如Safari' for iOS and 'Chrome', 'Chromium', or 'Browser' for Android;與app屬性互斥。
- udid:物理機的id。比如1ae203187fc012g。
下面這些屬性是android平台特定的:
- appActivity:待測試的app的Activity名字。比如MainActivity, .Settings。注意,原生app的話要在activity前加個"."。
- appPackage:待測試的app的java package。比如com.example.android.myApp, com.android.settings。
獲取Android app的appActivity
網上有寫很多方法https://testerhome.com/topics/1030,評論區還有補充
我用的是把apk后綴改為zip格式,打開壓縮包后再打開AndroidManifest.xml文件。找到manifest和activity地方,就是包名跟activity名。