appium的使用--python

介绍

Appium 是一个自动化开源工具,支持 iOS 、 Android 和 Windows 桌面平台上的原生、移动 Web 和混合应用的自动化 。
属于UI测试,用来模拟手工测试。

优势

(1)解放双手,但并不完全解放双手,需要手动辅助,并不是100%的自动化。
(2)节省大量时间,可无人看管情况下运行,在流程结束时监视结果。
(3)精准定位问题。
(4)重复使用,在不同手机上都可以运行。

环境

Java jdk ,
android sdk,
Nodejs

驱动

UiAutomator2

参照文档

https://static.kancloud.cn/testerhome/appium_docs_cn/2001682

原理

在这里插入图片描述

解释:appium 是有一个用nodejs写的服务器,不需要自己手动写。客户端需要自己写的自动化测试代码。Appium 的核心一个是暴露 REST API 的 WEB 服务器,它接受来自客户端的连接,监听命令并在移动设备上执行,答复 HTTP 响应来描述执行结果。

driver 参数设置

在这里插入图片描述

获取页面元素,只能是当前页面

a=driver.page_source

元素查找

查找单一元素:driver.find_element(by=BY.,value=‘’)
查找多个元素:driver.find_elements(by=BY.,value=‘’)
父元素查找子元素:parents.find_elements(by=BY.,value=‘’)

屏幕滑动

self.driver.swipe(width * 0.9, height * 0.5, width * 0.1, height * 0.5, duration=1000)

获取当前的Activity

self.driver.current_activity

等待方式

添加等待的原因:等待元素的出现。
(1)显示等待。
WebDriverWait(driver实例, 最长等待时间, 轮询时间).until(结束条件)
(2)强制等待。
time.sleep()
不推荐使用。
(3)隐式等待。
self.driver.implicitly_wait(8)
是一个全局的等待方式,每隔0.5s查找一次,如果8秒之内查找到元素,后面的时间就不等待。会导致脚本的执行速度整体变慢。为了所有的find_element方法都有一个很好的缓冲。
ps:推荐使用显示等待,

获取app名字

def get_app_name(file_dir) -> str:
    for root, dirs, files in os.walk(file_dir):
        files = [file for file in files if file.endswith(".apk")]
        if len(files) == 1:
            return files[0]
        else:
            raise FileNotFoundError("{}目录下没有测试包或者存在多个测试包。。".format(file_dir))

获取app包名


```python
def get_app_package_name() -> str:
    cmd = "aapt dump badging {} | findstr package".format(appPath)

    result = exec_cmd(cmd)
    if "package" in result:
        package_name = result.strip().split(
            " ")[1].split('=')[1].replace("'", "")
        return package_name
    else:
        raise NameError("未获取到package name。")

获取app打开页面

def get_app_launchable_activity() -> str:
    cmd = "aapt dump badging {} | findstr launchable".format(appPath)
    result = exec_cmd(cmd)
    if "launchable" in result:
        launchable_activity = result.strip().split('=')[1].replace(
            "label", '').replace(" ", '').replace("'", '')
        return launchable_activity
    else:
        raise NameError("未获取到launchable activity。")

获取手机安卓版本

def get_devices_version(device: str) -> str:
    if not isinstance(device, str):
        raise Exception("device type is should str..")
    result = exec_cmd(
        "adb -s {} shell getprop ro.build.version.release".format(device))
    result = result.strip()
    if "error" not in result:
        return result
    else:
        raise Exception("获取设备系统版本失败,无法进行正常测试。。")

pom 框架介绍

POM提供了一种在UI层操作、业务流程与验证分离的模式,这使得测试代码变得更加清晰和高可读性。分层封装。
框架分为三层:
1.基础层BasePage:封装一些最基础的selenium的原生的api方法,元素定位,框架跳转等。

2.PO层:元素定位、获得元素对象,页面动作

3.测试用例层:业务逻辑,数据驱动!

源码: 在本篇文章内

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2.4

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值