首页 > 编程语言 >appium的使用--python

appium的使用--python

时间:2024-04-03 11:59:42浏览次数:27  
标签:appium 元素 -- cmd driver launchable python result str

介绍

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.测试用例层:业务逻辑,数据驱动!

源码: 在本篇文章内

标签:appium,元素,--,cmd,driver,launchable,python,result,str
From: https://blog.csdn.net/afeiying_/article/details/137332488

相关文章

  • 【STM32嵌入式系统设计与开发】——16InputCapture(输入捕获应用)
    这里写目录标题STM32资料包:百度网盘下载链接:链接:https://pan.baidu.com/s/1mWx9Asaipk-2z9HY17wYXQ?pwd=8888提取码:8888一、任务描述二、任务实施1、工程文件夹创建2、函数编辑(1)主函数编辑(2)USART1初始化函数(usart1_init())(3)USART数据发送函数(USART1_Send_Data())(4)USART......
  • 【建议收藏】阿里巴巴1688专业术语大全,电商运营必备
    PV:全称PageView,即页面访问量,每打开一次页面PV计数+1。UV:全称UniqueVisitor,指独立访客访问数,一台电脑终端为一个访客。SKU:SKU是指一款商品,每款都有一个SKU,便于电商品牌识别商品。一款商品多色,则是有多个SKU;例:一件衣服,有红色、白色、蓝色。GMV:交易金额。BSR:1688买家服务......
  • MCS-51单片机汇编指令总结
    一、前言       本片文章是基于MCS-51单片机的汇编指令集进行的指令总结,讲解内容少,记忆内容多,方便查询使用,也可以应对考试内容记忆......
  • 【跨境商家福音】一款性价比高、好用的跨境选品工具
    亚马逊、速卖通、Shopee、Lazada、美客多、eBay、SHEIN、Temu、Tiktok、shopify等跨境电商平台,其用户消费喜好多样,涵盖服装、美妆、电子产品等多个品类。而店雷达作为一款基于大数据和人工智能技术的电商分析工具,为商家提供了强大的选品和数据分析功能。结合店雷达,商家能更精......
  • C#手术麻醉信息系统源码 前端Vue,Ant-Design+后端百小僧开源框架开发的手麻系统源码
        手术麻醉临床信息系统遵循“以病人为中心、服务于临床”的宗旨,使医护人员从繁琐的病历书写中解放出来,集中精力关注病人的诊疗,将更多的时间用于分析、诊断。以服务围术期临床业务工作的开展为核心,为医护人员、业务管理人员、院级领导提供流程化、信息化、自动化、智......
  • cka认证
    1、考核知识:基于角色的访问控制-RBACContext为部署流水线创建一个新的ClusterRole并将其绑定到范围为特定的namespace的特定ServiceAccount。Task创建一个名为deployment-clusterrole的clusterrole,该clusterrole只允许对Deployment、Daemonset、Statefulset......
  • TPS上不去案例解析
    案例1.TPS原因上不去原因:磁盘满了分析:**磁盘的监控**iostat-xm5(以兆为单位5秒刷新一次) rs,ws每秒读写情况Await等待的时间Svctm磁盘服务时间百分比%util磁盘总占用率(sda盘%util超过了80%,那么sda盘到了瓶颈)解决:加硬件 2.TPS原因上不去原因:系统采用sprin......
  • linux下mysql8.0更新密码报错解决方案(已知密码)
    先登录./mysql-uroot-p输入密码 然后更改密码直接执行ALTERUSER'root'@'localhost'IDENTIFIEDBY'密码';会失效会报:ERROR1396(HY000):OperationALTERUSERfailedfor'root'@'localhost'进行如下操作即可usemysql;updateuserset......
  • P2831 [NOIP2016 提高组] 愤怒的小鸟
    思路状压+优化代码#include<iostream>#include<stdio.h>#include<algorithm>#include<string>#include<cmath>#include<string.h>#defineR(x)x=read()#defineFor(i,j,n)for(inti=j;i<=n;++i)usingnamespac......
  • ImportError: DLL load failed while importing _cext: 找不到指定的模块
    网上搜索说,这个错误表明Python在尝试导入名为_cext的扩展模块时失败了,这通常是因为它依赖的某些动态链接库(DLL)文件无法被正确加载。这可能是因为相应的DLL文件不存在于预期的位置,或者系统缺少运行该DLL所必需的其他依赖项。在一个帖子中看到通过pipinstallmsvc-runtime可以即......