Appium测试安卓应用

Appium作为移动端的测试框架,可以用于自动化测试手机App(下载地址)。Appium自身不带图形界面,必须配合测试代码使用。

为方便初期调试,可使用Appium Desktop(点击下载),它不仅包含了Appium还自带了模拟器界面,还可以让你在电脑端通过图形界面操控手机App。

测试安卓App前的准备工作

要使用Appium测试安卓App,必须满足以下几个先决条件:

  1. 安卓手机必须开启USB调试及USB安装权限。(小米手机每次测试时都会弹出安装提示,不建议使用小米手机。)
  2. 电脑端安装并配置好安卓开发环境,确保adb命令可用。
  3. 调试时手机不能黑屏,建议将超时时间设长一点。

Appium桌面版的使用

启动Appium Desktop,点击Start Server启动服务。服务启动成功后,通过按键Ctrl+N或菜单File - New Session Window创建一个测试,这时需要配置测试目标:

Appium new session

以下几个参数是必须的:

  • platformName 固定为Android
  • deviceName 即设备名称。连上测试手机后,可通过adb devices -l查看,model后面的字符串即为设备名。例如对于下面的返回结果,设备名为HWP30
    <device_id>               device usb:1-2.4 product:P3T model:HWP30 device:HW12921C transport_id:3
    
  • appPackageappActivity。可通过以下办法获取这两个参数值:将手机连上电脑,在手机上打开目标应用,然后使用adb shell命令进入adb控制台(如果你的电脑连了多台手机,请使用adb -s <device_id> shell),输入以下命令:
    $dumpsys activity | grep mFocusedActivity
    

返回结果如 mFocusedActivity: ActivityRecord{xxx992 u0 com.tencent.mm/.ui.LauncherUI t122}。其中加粗的部分即为appPackageappActivity

使用noReset避免数据被清除

使用Appium测试时,默认每次测试时均会先清除应用原有数据

如果你使用Appium Desktop在真机上测试,一定要注意这点。比如你在Appium Desktop里通过返回或Home键返回了手机主界面,再通过点击事件点击某个应用,这个应用即使在之前没有被配置为待测应用,其数据仍然会被清除!

通过将noReset设为true可让Appium保留App数据,这样就避免了上述问题。

提示:配置好后,右侧自动生成JSON文本。如果想保存配置,下次再用,可以点击旁边的编辑按钮,复制为文本,保存在本地。下次再复制进来就可以了。

点击Start Session就可以开机在电脑上调试手机App了。点击界面上的按钮等元素,就可以查看此元素的信息。

提示:如果连接成功后发现手机与电脑端Appium显示的界面不一致,可点击刷新按钮同步一下显示。

使用Python自动化

Appium Python客户端通过Selenium实现。使用方法与Selenium非常相似,这里就不扩展了。

调用前需要确保已在电脑端开启Appium服务(通过Appium或Appium Desktop开启均可)。

from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.by import By 
 
PLATFORM='Android' 
deviceName='XXX'
app_package='com.tencent.mm' 
app_activity='.ui.LauncherUI' 
driver_server='http://127.0.0.1:4723/wd/hub' 
 
 
class AppTest(): 
    def __init__(self): 
        self.desired_caps={ 
            'platformName':PLATFORM, 
            'deviceName':deviceName, 
            'appPackage':app_package, 
            'appActivity':app_activity,
            'noReset': True,
        } 
        self.driver=webdriver.Remote(driver_server, self.desired_caps) 
        self.wait=WebDriverWait(self.driver,300) 

    def get_page(self, text):
        self.wait.until(EC.presence_of_element_located((By.ID, 'com.tencent.mm:id/tb')))
        m_contacts = self.driver.find_elements(by= By.ID, value='com.tencent.mm:id/tb')
        m_contacts[1].click()


        self.wait.until(EC.presence_of_element_located((By.ID, 'com.tencent.mm:id/kr')))
        c_list = self.driver.find_elements(by= By.ID, value='com.tencent.mm:id/kr')
        c_list[3].click()

关于微信+Appium的一点说明

微信近来禁止一切模拟器操作,一旦发现,直接封号!想用微信自动化一些微信操作的可洗洗睡了。

相关文章

Comment