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

本文介绍了使用Python进行Appium移动端自动化测试的优势,相较于Java,Python提供了更流畅的体验和更高的运行速度。文章详细阐述了Python Appium的基本脚本开发步骤,包括元素定位方法如ID、ClassName、XPath等,并展示了如何进行元素操作如点击、输入等。此外,还给出了使用unittest框架组织测试用例的示例,以及测试报告的生成。
摘要由CSDN通过智能技术生成

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

一、脚本开发基本步骤

  1. 引入头文件
  2. 配置appium参数
  3. 启动appium
  4. 定位元素
  5. 关闭
# 引入头文件
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()

三、元素操控

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

四、python+appium+unittest

步骤:

  1. 写一个类,继承unittest.TestCase
  2. setUp函数中写配置appium参数和调用appium
  3. 测试用例函数中写登录qq的代码
  4. tearDown函数中写关闭app的代码
  5. 最后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的安装与部署

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值