appium 笔记

news2024/11/16 18:01:35
配置相关信息查看 appium.io
初始化:
desired_caps = {}
desired_caps["automationName"] = "UiAutomator2"
desired_caps["platformName"] = "Android" # 操作系统类型
desired_caps["platformVersion"] = "5.1.1" # 版本5.1.1
desired_caps["deviceName"] = "Android Emulator" # 手机类型 为模拟器
desired_caps["noReset"] = True # 不重置app
 
# aapt dump badging 包路径 在E:\Lemon_Class\Lemon_appium\android-sdk_r24.4.1-windows\android-sdk-windows\build-tools\29.0.0>路径下
desired_caps["appPackage"] = "com.tencent.edu" # 使用腾讯课堂app
desired_caps["appActivity"] = "com.tencent.edu.module.SplashActivity"
 
# 与appium组成联系,并打开
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)

 滑动:

# 获取设备高和宽
size = driver.get_window_size()
# 从右往左滑动
driver.swipe(size["width"] * 0.9,size["height"] * 0.08,size["width"] * 0.1,size["height"] * 0.08,200)
sleep(2)
# 从上往下滑动
driver.swipe(size["width"] * 0.5,size["height"] * 0.9,size["width"] * 0.5,size["height"] * 0.1,200)

TouchAction操作:

touch_ele = driver.find_element_by_android_uiautomator('new UiSelector().text("萌姐教你面试的软实力")')
loc = touch_ele.location # 获取元素坐标
print(loc)
TouchAction(driver).press(x=loc[0],y=loc[1]).perform() 

滑动到底部

old = None
new = driver.page_source # 获取当前页面页数
 
while True:
    if old == new:# 滑动到底部就是页面页数不再发生改变的情况
        break
    else:
        driver.swipe(size["width"] * 0.5, size["height"] * 0.9, size["width"] * 0.5, size["height"] * 0.1, 200)
        sleep(2)
        old = new
        new = driver.page_source 

滑动到指定元素:

old = None
new = driver.page_source # 获取当前页面页数
ele = "指定元素"
while True:
    if old == new:# 滑动到底部就是页面页数不再发生改变的情况
        break
    else:
        if driver.page_source.find(ele) != -1:
            print("找到了元素/滑动到了指定元素的当前页面")
            break
        else:
            driver.swipe(size["width"] * 0.5, size["height"] * 0.9, size["width"] * 0.5, size["height"] * 0.1, 200)
            sleep(2)
            old = new
            new = driver.page_source

Toast抓取:

try:
    xpath = '//*[contains(@text,"toast提示框文本内容,部分或者全部")]'
    # 只能使用presence_of_element_located 使用visibility_of_element_located会报错
    WebDriverWait(driver,30,0.01).until(EC.presence_of_element_located((MobileBy.XPATH,xpath))
    print("成功捕捉")
except Exception as e:
    print("未成功")
    print(e)
else:
    print("找到对应toast了")

H5界面操作

# 进入有页面(H5)的界面(context),也就是class = android.webkit.WebView
# 获取所有context.
sleep(5)
cons = driver.contexts
print(cons)
# 根据context名字,切换到WebView
# 参考 www.lemfix/topics/317
driver.switch_to.context('WEBVIEW_com.lemon.lemonban')
# web自动化操作
# 1.使用 uc-devtool 百度云有安装包 需要移动端界面处于h5界面(界面显示chrome版本信息方便下载 chromedriver) 在inspect点击后
# 2.FQ chrome://inspect
# 3.driver.page_source得到html页面源码
# 4.chromedriver存放,仅限安卓
desired_caps["chromedriverExecutable"] = 'driver存放目录' # 一般在开头声明
# 5.返回app界面
driver.switch_to.context(None)

 x5内核应用

# 微信x5界面
# www.lemfix.com/topics/317 开启微信调试模式教程
# 支持X5内核应用自动化配置 appium.io中的Android_only
desired_caps["recreateChromeDriverSessions"] = True
# 确认当前web页面所在进程
"""
cmd后
adb shell dumpsys activity top  findstr ACTIVITY
获取当前进程中 app所在页面的进程序号
adb shell ps app所在页面的进程序号
获取末尾name下的com.tencent.mm:appbrand0(页面所在进程名称)
"""
desired_caps["chromeOptions"] = {"androidProcess":"com.tencent.mm:appbrand0"}
desired_caps["browserName"] = "" # 浏览器名字 Safari chrome等 如果是在APP内 则置空处理
# 参考www.cnblogs.com/yyoba/p/9455519.html

  adb命令通过坐标点击

os.system("adb shell input tap 350 736")

窗口过多可以使用窗口切换配合find查找使用

# app内窗口切换
hs = driver.window_handles
for handle in hs:
    driver.switch_to_window(handle)
    print(handle)
    sleep(3)
    if driver.page_source.find("文本信息")!= -1:
        break

🎁更多干货


完整版文档下载方式:

这些资料,对于从事【软件测试】等相关工作的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享。

在评论区和我互动交流或者私❤我【软件测试学习】领取即可,拿走不谢。


如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “👍点赞” “✍️评论” “💙收藏” 一键三连哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/737877.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[入门必看]数据结构6.2:图的存储及基本操作

[入门必看]数据结构6.2:图的存储及基本操作 第六章 图6.2 图的存储及基本操作知识总览6.2.1 邻接矩阵法6.2.2 邻接表法6.2.36.2.4 十字链表、邻接多重表6.2.5 图的基本操作 6.2.1 邻接矩阵法图的存储——邻接矩阵法邻接矩阵法存储带权图(网)邻…

OpenAI再建顶级团队,重金招聘核心岗成员,阻止超级AI的威胁!

“AI确实可能会杀死人类。”这并不是哪家自媒体为博人眼球而发表的谣言,而是ChatGPT之父、OpenAI CEO山姆奥尔特曼在今年3月与MIT研究科学家Lex Fridman对话时亲口所说的一句话。 如今,这位全世界最受瞩目的老板决定采取行动,以阻止自己的预…

【算法】AcWing算法基础课笔记 第一章 基础算法 Part 1

🚀Write In Front🚀 📝个人主页:令夏二十三 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 📣系列专栏:AcWing 💬总结:希望你看完之后,能对你…

Python程序设计基础:列表与元组(一)

文章目录 一、列表的表示与访问1、列表的表示2、列表的访问 二、列表的元素操作1、元素的修改2、元素的增加3、元素的删除4、其他操作 三、列表操作1、列表的遍历2、列表的排序3、列表的切片4、列表的扩充5、列表的复制6、列表的删除 一、列表的表示与访问 1、列表的表示 列表…

自营外卖配送平台的商家如何对接第三方美饿的订单

自营外卖跑腿平台对接第三方美饿的好处 单说美团饿了么自身的流量优势,很多商家不能忽视,但是美团饿了么的高额配送成本与抽成,同样也不能忽视。很多商家希望选择自配送或者其他更划算的配送方式来节省成本。这时,区域性的自建外…

【Java】单例模式

单例模式 设计模式概述单例模式实现思路饿汉式懒汉式饿汉式 vs 懒汉式 设计模式概述 设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模式免去我们自己再思考和摸索。就像是经典的棋谱,不同的棋局,我…

AttributeError: module ‘collections‘ has no attribute ‘Iterable‘

vitables 出现 AttributeError: module collections has no attribute Iterable错误修改如下图:

PCIE转PMC载板

描述 这是一款被动适配卡,它支持通过要转换为 PCIe x4 通道边缘连接器的 AMC 接头,来选择 TI EVM;因此它可被插入一个台式计算机或使用 PCIe 接头的任何位置。选定的 TI EVM 支持 DSP 上的本地 PCIe。此卡作为适配器,需要可与 AMC…

Linux与Windows:操作系统的比较与技巧分享

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

Java 动态规划 Leetcode 62. 不同路径

代码展示&#xff1a; class Solution {public int uniquePaths(int m, int n) {//定义dp数组//二维数组多增加一行一列&#xff0c;方便对数组进行初始化int[][]dpnew int[m1][n1];//初始化dp[0][1]1;//填充数组for(int i1;i<m;i){for(int j1;j<n;j){dp[i][j]dp[i-1][j…

@Around踩坑记录

Around踩坑记录 先上结论&#xff1a; 如果你在定义切面的时候打算使用环绕通知➕定义注解的方式&#xff0c;那么在进行*Around*("(annotation(costTrace))") 类似这样的定义的时候&#xff0c;”costTrace“一定要与你定义切面中入参的参数名字一致&#xff0c;而…

【嵌入式Qt开发入门】Qt如何使用多线程——初识QThread

我们写的一个应用程序&#xff0c;应用程序跑起来后一般情况下只有一个线程&#xff0c;但是可能也有特殊情况。比如我们前几篇的例程都跑起来后只有一个线程&#xff0c;就是程序的主线程。线程内的操作都是顺序执行的。但试着想一下&#xff0c;我们的程序顺序执行&#xff0…

模拟日志数据

模拟日志数据。。 日志模拟器主要模拟站点的用户信息和用户行为日志数据 使用shell调用java类实现数据的生产 ! 所需文件如下: datagen.jar genlog.sh 注意: 存储数据的文件夹要预先创建好 Bash mkdir -p /tmp/doit/user_data mkdir -p /tmp/doit/log_data 将用来模拟生成…

【安全】Xsslabs(1~13)基于白盒测试浅析

目录 环境 关卡 level 1 level 2 level 3 level 4 level 5 level 6 level 7 level 8 扩展 level 9 level 10 level 11 level 12 level 13 总结 环境 PHP&#xff1a;php7.3.4nts 中间件&#xff1a;Nginx1.15.11 工具&#xff1a;Hackbar 关卡 level …

超长上下文处理:基于Transformer上下文处理常见方法梳理

原文链接&#xff1a;芝士AI吃鱼 目前已经采用多种方法来增加Transformer的上下文长度&#xff0c;主要侧重于缓解注意力计算的二次复杂度。 例如&#xff0c;Transformer-XL通过缓存先前的上下文&#xff0c;并允许随着层数的增加线性扩展上下文。Longformer采用了一种注意力…

【GLBCXX_3.4.21 not found】问题解决

问题描述 rootlocalhost:/home# rar -h rar&#xff1a;/lib64/libstdc.so.6 ,version "GLBCXX_3.4.21" not found 问题排查过程 下载相应的GCC源码&#xff0c;找到适合自己版本&#xff0c;这里选择是的是7.3.0 gcc源码下载地址&#xff1a;http://ftp.gnu.org/g…

fastadmin数据内容admin_id权限

/*** 是否开启数据限制* 支持auth/personal* 表示按权限判断/仅限个人* 默认为禁用,若启用请务必保证表中存在admin_id字段*/protected $dataLimit true;/*** 数据限制字段*/protected $dataLimitField admin_id;

第一次上传GitHub代码------教程、记录和踩雷

刚录用的一篇论文&#xff0c;编辑要求上传GitHub repo。 对于上传代码&#xff0c;本人是一无所知&#xff0c;写这篇博客记录一下 一. 创建代码仓库 点击右上角&#xff0c;选择New repository&#xff0c;来创建仓库&#xff1a; 根据提示&#xff0c;填写仓库的名称、描述…

TCP 协议(二)连接与断开

TCP 连接概述 TCP 协议是一种面向连接的、可靠的数据传输协议&#xff0c;同时 TCP 连接是全双工的&#xff0c;即连接的两端可以互传数据。在深入了解 TCP 连接之前&#xff0c;我们先来弄清楚整个 TCP 连接的过程&#xff0c;之后在深入整个数据报文结构来认识 TCP。 TCP连…

全网最全,adb常用命令大全(详细)全覆盖,看这篇就够了..

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 adb 模拟按键输入…