基于python语言的appium移动端自动化测试

it2026-09-30  12

上一篇讲到基于Java语言的appium自动化测试。老实说,在使用的过程中让人极其不快,它没有接口自动化的速度,甚至于比UI自动化慢很多。在代码运行过程中,总是会由于各种问题,导致代码运行中断,需要我们不断的加等待时间来增强代码的稳定性。其次就是对于元素的获取很麻烦,appium自带的截屏工具会与脚本运行占端口,对于元素定位失败想重新获取其他元素进行定位时,还需要重新启动截屏工具。最后就是adb也不是很稳定,总是会出环境变量的一些问题。所以说,就效率而言,移动端进行自动化,还使用Java语言,应该考虑好是否真的可行。 今天带来的是运用python语言进行appium移动端自动化测试,整体会比Java语言来的流畅,运行速度也会有所提高,如果需要自动化,运用python是一个不错的选择

一、脚本开发基本步骤

引入头文件配置appium参数启动appium定位元素关闭 # 引入头文件 from appium import webdriver # 配置appium参数 desired_caps = {} desired_caps['platformName'] = '平台' desired_caps['platformVersion'] = '版本号' desired_caps['deviceName'] = 'Android Emulator' desired_caps['appPackage'] = '包名' desired_caps["noReset"] = True desired_caps['appActivity'] = '活动界面地址' # 启动appium driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) # 定位元素 ...... # 关闭 driver.quit()

二、元素定位

1. ID定位

# resourceId属性的方法 driver.find_element_by_id('resource_Id的值') # 以accessibility_id进行定位,对Android而言,就是content-description属性 driver.find_element_by_accessibility_id('content-description的值')

2. ClassName 定位

# 定位唯一元素 driver.find_element_by_class_name("class的值")#如果有很多个,默认第一个 # 找到所有android.widget.EditText并定位第?个 driver.find_elements_by_class_name("class的值")[1]#表示第二个

3. Xpath 定位

driver.find_element_by_xpath(路径) driver.find_elements_by_xpath(路径)[0] #是个list

4. Uiautomator 定位

#text属性的方法 知道text属性的全部信息 driver.find_element_by_android_uiautomator('new UiSelector().text("Custom View")').click()

5. 知道text属性的一部分部信息

# textContains,随便一部分 driver.find_element_by_android_uiautomator('new UiSelector().textContains("View")').click() #textStartsWith,开头部分 driver.find_element_by_android_uiautomator('new UiSelector().textStartsWith("Custom")').click()

6. #class属性的方法

#className driver.find_element_by_android_uiautomator('new UiSelector().className("android.widget.TextView").text("text值")').click()

7. #classNameMatches

driver.find_element_by_android_uiautomator('new UiSelector().classNameMatches(".*TextView$").text("text值")').click()

8. #resourceId属性的方法

#resourceIdMatches #com.tencent.qqlite:id/login .*表示前面的任何字母,$表示到此为止 下面的是点击登陆按键 driver.find_element_by_android_uiautomator('new UiSelector().resourceIdMatches(".*id/login$")').click();

9. #元素的其他属性

clickable(true)表示这个元素是否可以点击,可以用来缩小查找范围 driver.find_element_by_android_uiautomator('new UiSelector().clickable(true).text("Custom View")').click()

三、元素操控

click() --点击send_keys() --输入clear() --清空driver.get_window_size()[‘width’] driver.get_window_size()[‘height’]driver.swipe() --滑动

四、python+appium+unittest

步骤:

写一个类,继承unittest.TestCasesetUp函数中写配置appium参数和调用appium测试用例函数中写登录qq的代码tearDown函数中写关闭app的代码最后unittest.main()调用

比如: xiaoMiCase.py

import time import unittest from appium import webdriver class xiaoMiCase(unittest.TestCase): def setUp(self): # 配置appium参数 # 定义一个字典 des_cps = {} # 平台 des_cps['platformName'] = 'android' # 设备名 des_cps['deviceName'] = 'Android Emulator' # 版本号 des_cps['platformVersion'] = '5.1.1' # 不需要重新设置 des_cps['noReset'] = True # 包名 des_cps['appPackage'] = 'com.xiaomi.shop' # 活动页 des_cps['appActivity'] = 'com.xiaomi.shop2.activity.MainActivity' # 启动aapium self.dr = webdriver.Remote('http://127.0.0.1:4723/wd/hub', des_cps) def testXiaoMi(self): time.sleep(2) self.dr.find_element_by_android_uiautomator('new UiSelector().text("分类")').click() time.sleep(2) self.dr.find_element_by_android_uiautomator('new UiSelector().text("电视")').click() time.sleep(2) self.dr.find_element_by_android_uiautomator('new UiSelector().text("激光投影电视")').click() time.sleep(2) self.dr.find_element_by_android_uiautomator('new UiSelector().text("米家投影仪 青春版2")').click() time.sleep(2) aa = self.dr.find_element_by_id('com.xiaomi.shop2.plugin.goodsdetail:id/product_name').is_displayed() self.assertTrue(aa) def tearDown(self): time.sleep(5) self.dr.quit()

maintest.py

import unittest from HTMLTestRunner import HTMLTestRunner discover = unittest.defaultTestLoader.discover(r'C:\XXX\python\appium1\case',pattern='*.py') with open(r"C:\XXX\res.html","wb") as f: runner = HTMLTestRunner(stream=f,verbosity=-1,title='移动端自动化测试报告',description='抖音、QQ、小米移动端测试报告') runner.run(discover)

至于自动化集成部署,请移步:自动化测试集成之Jenkins的安装与部署

最新回复(0)