app自动化之启动参数获取、元素定位工具和元素定位方式_weditor如何获取启动界面-程序员宅基地

技术标签: uiaotuomator  # python自动化  appium  weditor  # appium  自动化  

https://blog.csdn.net/weixin_45912307/article/details/122392478

1. 启动参数获取

1.1 下载qq

官网:https://im.qq.com/download
在这里插入图片描述
在这里插入图片描述

1.2 获取启动参数

1. 获取操作系统版本
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2. 获取设备名称

  • cmd
  • adb devices
    在这里插入图片描述
    3. 安装qq
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    4. 获取包名和启动页面名称
    方式1:
    • 到build-tools的目录下选择任意一个版本,以32.0.0为例,进入aapt.exe目录下
    • cmd回车打开终端
    • 输入aapt dump badging apk安装路径(如C:\Users\用户名称\Downloads\Android_8.8.55.6900_537105254_32.apk)
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

方式2:

  • cmd回车打开终端
  • 输入adb logcat |findstr -i Displayed
    在这里插入图片描述

5. 设置appium server启动参数
在这里插入图片描述

1.3 整理启动参数

# 1. 从appium库里导入driver对象
from appium import webdriver
# 2. server启动参数
desired_caps = dict()
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.1.1'
desired_caps['deviceName'] = 'emulator-5554'
desired_caps['appPackage'] = 'com.tencent.mobileqq'
desired_caps['appActivity'] = 'com.tencent.mobileqq.activity.SplashActivity'
# 3. 声明driver对象
driver = webdriver.Remote('http://127.0.0.1:5554/wd/hub', desired_caps)

2元素定位工具和定位方式

2.1 第一种: android SDK自带工具:uiAutormatorViewer

在这里插入图片描述
在这里插入图片描述

2.2 第二种:python版uiAutomator2中的weditor

1. 安装工具

pip install -U uiautomator2   |			安装第三方库
python -m uiautomator2 init   | 		初始化uiautomator2
pip install -U weditor        | 		安装定位工具
weditor --help				  | 		检查是否安装成功
weditor 					  | 		启动定位工具(网页版)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2. 工具使用

  • 启动命令:weditor
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.3 第三种:appium自身定位工具appium inspector

2.3.1 点击appium搜索按钮

在这里插入图片描述

2.3.2 填写连接设备参数
{
  "platformName": "Android",
  "platformVersion": "5.1.1",
  "deviceName": "emulator-5554",
  "appPackage": "com.tencent.mobileqq",
  "appActivity": "com.tencent.mobileqq.activity.SplashActivity",
  "noRest": true
}

在这里插入图片描述

2.3.3 工具使用及解读
1. 工具界面说明

在这里插入图片描述

2. 查找元素
  • id:id唯一则有值不为空
  • xpath:采用绝对定位方式
    在这里插入图片描述
3. 录制脚本(qq登录为例)
  • 1.录制脚本
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 2.通过录制得到的脚本
el1 = driver.find_element_by_id("com.tencent.mobileqq:id/btn_login")
    el1.click()
    el2 = driver.find_element_by_accessibility_id("请输入QQ号码或手机或邮箱")
    el2.clear()
    el2.send_keys("qq号码")
    el3 = driver.find_element_by_accessibility_id("密码 安全")
    el3.clear()
    el3.send_keys("自己的qq密码")
    el4 = driver.find_element_by_id("com.tencent.mobileqq:id/pqz")
    el4.click()
    el5 = driver.find_element_by_accessibility_id("登 录")
    el5.click()
  • 3.组装脚本
# 1. 从appium库里导入driver对象
import time

from appium import webdriver
# 2. server启动参数
def qq_login():
    desired_caps = {
          "platformName": "Android",
          "platformVersion": "5.1.1",
          "deviceName": "emulator-5554",
          "appPackage": "com.tencent.mobileqq",
          "appActivity": "com.tencent.mobileqq.activity.SplashActivity",
          "noRest": True
        }
    # 3. 声明driver对象
    driver = webdriver.Remote('http://127.0.0.1:5554/wd/hub', desired_caps)
    # 隐式等待10s元素出现
    driver.implicitly_wait(10)

    el1 = driver.find_element_by_id("com.tencent.mobileqq:id/btn_login")
    el1.click()
    el2 = driver.find_element_by_accessibility_id("请输入QQ号码或手机或邮箱")
    el2.clear()
    el2.send_keys("49xxxxx00")
    el3 = driver.find_element_by_accessibility_id("密码 安全")
    el3.clear()
    el3.send_keys("自己qq密码")
    el4 = driver.find_element_by_id("com.tencent.mobileqq:id/pqz")
    el4.click()
    el5 = driver.find_element_by_accessibility_id("登 录")
    el5.click()

    time.sleep(5)
    driver.quit()
if __name__ == '__main__':
    qq_login()
  • 4.运行脚本效果
    在这里插入图片描述

2.4 app自动化常用的元素定位方式

id   					 		|  					driver.find_element_by_id(id_value)
ANDROID_UIAUTOMATO       		|					Rnew UiSelector().方法名称(值).方法名称(值).方法名称(值)
xpath					 		|					driver.find_element_by_xpath(xpath_value)
description content-desc 		|					driver.find_element_by_accessibility_id('view-text')
className				 		| 					driver.find_element_by_class_name(class_value)
坐标					 		|					os.system('adb shell tap x y')
模糊定位						    |					contains(@key,value)		

3. 实际案例(以qq登录为例)

# 1. 从appium库里导入driver对象
import time

from appium import webdriver
# 2. server启动参数
def denglu():
    desired_caps = dict()
    desired_caps['platformName'] = 'Android'
    desired_caps['platformVersion'] = '5.1.1'
    desired_caps['deviceName'] = 'emulator-5554'
    desired_caps['appPackage'] = 'com.tencent.mobileqq'
    desired_caps['appActivity'] = 'com.tencent.mobileqq.activity.SplashActivity'
    desired_caps['noRest'] = True

    # 3. 声明driver对象
    driver = webdriver.Remote('http://127.0.0.1:5554/wd/hub', desired_caps)
    driver.implicitly_wait(10)
    # 4. 点击登录
    driver.find_element_by_id("com.tencent.mobileqq:id/btn_login").click()
    # 5. 输入用户名
    user_name = driver.find_element_by_xpath('//*[@content-desc="请输入QQ号码或手机或邮箱"]')
    # 清除输入框
    user_name.clear()
    user_name.send_keys('492224xxxx')
    # 6. 输入密码
    user_pwd = driver.find_element_by_id('com.tencent.mobileqq:id/password')
    # user_pwd = driver.find_element_by_xpath('//*[@resource-id="com.tencent.mobileqq:id/password"]')
    # 清除输入框
    user_pwd.clear()
    user_pwd.send_keys('xxxxx')
    # 7.勾选同意协议
    driver.find_element_by_xpath('//*[@resource-id="com.tencent.mobileqq:id/pqz"]').click()
    # 8.点击登录
    driver.find_element_by_xpath('//*[@resource-id="com.tencent.mobileqq:id/login"]').click()
	
	# 退出或关闭驱动
    time.sleep(15)
    driver.quit()

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45912307/article/details/122392478

智能推荐

黑马程序员--使用ListView控件展示数据_黑马listview-程序员宅基地

文章浏览阅读726次。---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------一、图像列表控件1、ImageList控件的属性1> 定义图像列表控件是含有图像对象的集合,可以通过索引或关键字引用该集合中的每个对象。ImageList控件不能独立使用,只用来为Windows窗体中的其他控件提供图像2_黑马listview

react 实现一个无限循环的轮播器 附github地址-程序员宅基地

文章浏览阅读459次。一个简单的轮播为了更具有通用和参考性,轮播组件中,轮播只使用了react,没有添加其他的状态管理,或者参数类型限制的库. 所以这个轮播的方法,同样可以用于vue 等其他框架github地址最终效果显示无限循环原理如图所示,如果轮播里面有三个部分,那么可以在首端前添加一个跟最后一块一样的dom节点,同理在最末端添加跟首端相同的节点,这样当轮播到末端,在下一张的情况下,就可以无缝..._react carousel不暂停

微信小程序开发——开发者工具无法输入中文的处理_vant输入框输入中文报无效参数-程序员宅基地

文章浏览阅读2.7k次。微信小程序开发工具无法输入中文参考: https://www.cnblogs.com/xyyt/p/10005947.html异常描述操作系统工具版本类型Window10微信web开发者工具1.02.1902010bug官方回应处理方法经验证, ctrl(command) + shfit + w 重启下项目,是可行的,看来也只有如此了。期待下个..._vant输入框输入中文报无效参数

[附源码]Python计算机毕业设计Django的4s店车辆管理系统_基于django的汽车俱乐部管理系统设计与实现-程序员宅基地

文章浏览阅读331次。汽车信息管理,员工可在汽车信息管理页面查看汽车名称、汽车类型、汽车品牌、图片、能源类型、颜色、排量、价格、咨询电话、详细地址、上架日期等内容,还可进行新增、修改、查看评论或删除等操作,如图5-11所示。_基于django的汽车俱乐部管理系统设计与实现

PHP 实现汇聚adapay调用微信支付_php接入adapay-程序员宅基地

文章浏览阅读2.9k次。整理一下调起微信支付的流程:Adapay成功发起支付请求 -> 将请求成功中的 pay_info 返回给前端-> 前端使用 pay_info 调用微信支付Payment.php:发起支付的方法config.php:配置文件,引入参数文件(根据你自己的参数文件调整路径)_php接入adapay

iOS中NSAttributedString的使用--对关键字着色,以及处理html实例-程序员宅基地

文章浏览阅读112次。1,最近项目中用到了一个功能,一个很好的功能。就是用户在搜索的时候,搜索结果出来后对你输入的关键字进行红色标记。这样用户就很请楚的看到自己输入什么后会出现什么样子的结果。还有一个功能是,现在有一段文字了,但是要对其中的某些字符串进行着色处理,这个时候NSAttibutedString起到了非常大的作用。以下是我写好的一段代码,各位可以拿去用,非常方便的处理好。#imp..._ios 开发给代码关键词上色

随便推点

Flutter Widgets 之 FutureBuilder_flutter snapshot-程序员宅基地

文章浏览阅读1.2k次。展示异步任务状态当有一个Future(异步)任务需要展示给用户时,可以使用FutureBuilder控件来完成,比如向服务器发送数据成功时显示成功提示:var _future = Future.delayed(Duration(seconds: 3), () { return '老孟,一个有态度的程序员'; });FutureBuilder( future: _future, builder: (context, snapshot) { ._flutter snapshot

springboot/java/php/node/python西塘草舍农场管理系统【计算机毕设】-程序员宅基地

文章浏览阅读19次。后端由Spring Boot提供支持,前端由Vue.js构建,数据存储和管理通过MySQL和Navicat实现,整个开发流程由Maven进行管理,并在Tomcat服务器上运行。开发工具:idea/eclipse/myeclipse。环境配置软件: JDK1.8+Maven3.3.9。数据库管理工具:Navicat10以上版本。操作系统:win7以上,最好是win10。文末可领取本课题的JAVA源码参考。数据库:mysql5.7或8.0。服务器:Tomcat7.0。

电脑围棋-程序员宅基地

文章浏览阅读3.4k次。1.0 概述本文旨在向读者介绍电脑围棋领域的状况及 Internet 上的相关资源。 为照顾尚不熟悉围棋的读者,第2部分介绍了围棋的基本常识和规则,熟悉这些的读者可以跳过它,或在必要时参考。 第6部分将告诉读者,由于各自的特点,目前围棋程序的水平与国际象棋程序相比差距极大,有待于进一步投入力量开发;第3部分 给出了其理论和实践的依据,并指出围棋程序是不可能仿照国际象棋程序那样开发的(参见表一)。 _电脑围棋

输入与输出实验-程序员宅基地

文章浏览阅读1.4k次,点赞3次,收藏6次。(一)查看并运行下列程序并回答问题。package case1;import java.io.*;public class IOExample { public static void main(String[] args) throws IOException { // 一行一行读入数据 BufferedReader in = new BufferedReader(new FileReader("IOExample.java")); ._输入与输出实验

Jar包启动通过ClassPathResource获取不到文件路径问题_classpathresource找不到文件-程序员宅基地

文章浏览阅读8.7k次。但是如果将项目打包成一个jar包后,再获取map.properties是获取不到的,对于操作系统来说最多只能读取到jar包,而不能再继续读取jar包里面的文件了,如果继续读取,只能交给jvm去读了,此时能读取到二进制流,而不能获取到路径。可通过以下几种方式获取classpath下的资源。如果是使用idea进行本地开发时,是可以获取到classpath下的资源的路径的,因为是读取的磁盘上的真正的那个文件。maven项目resources目录也是会被编译到classpath下的。..._classpathresource找不到文件

短期学习就能月薪过万?IT培训套路揭秘,教育机构宣传是真是假_外面培训学校学几个月it毕业就一万多一个月真的假的-程序员宅基地

文章浏览阅读1k次。互联网时代,每个想要进入IT行业的人都或多或少地考虑过去IT教育培训机构学习。现在,很多IT教育培训机构在宣传的时候,都称短期学习就可以帮助大家月薪过万。而看到这样的宣传,很多人都动心了。但还有不少人产生了质疑,短期学习真的就能让自己月薪过万吗?其实,大家在浏览一些IT教育机构的宣传网站的时候应该也可以注意到,IT培训课程分多个专业,不同专业的学习时间不同,最后就业时的真实工资也不同。目前多数I..._外面培训学校学几个月it毕业就一万多一个月真的假的

推荐文章

热门文章

相关标签