appium+python搭建自动化测试框架_Appium元素定位(二)
Appium元素定位:
工具:Android\android-sdk\tools uiautomatorviewer.bat
1. id定位:
self.driver.find_element_by_id('com.tencent.mobileqq:id/btn_login').click()
2. class定位:
self.driver.find_element_by_class_name('android.widget.Button').click()
(注:一般一个页面上的class属性不唯一,元素不唯一的话定位会报错了)
3. 相对定位:
相对定位是先找到该元素的有对应属性的父元素节点,然后基于父元素进行元素定位。
代码举例:
此处只是举例什么是相对定位,一般有id直接可以定位当然不这么干,在没有id的情况下可以这么定位。。。。。。。。。。。
self.driver.find_element_by_id('com.tencent.mobileqq:id/name')
self.driver.find_element_by_class_name('android.widget.Button').click()
uiautomatorviewer截屏:
4. xpath定位:
代码举例:
name = self.driver.find_element_by_xpath('//android.widget.EditText[@text="QQ号/手机号/邮箱"]').send_keys('********')
name = self.driver.find_element_by_xpath('//*[@class="android.widget.EditText" and @index="3"]').send_keys('********')
uiautomatorviewer截屏:
5. List定位:
List定位首先是使用find_elements_by_id(class_name/path)获取一组相同的class属性的的元素,然后使用数组下标来区分标记不同元素进行相关操作
代码举例:
一般从相册设置头像或是选择照片时,会用到list定位,因为每一张照片的id是相同,那就要通过下标来定位所选的照片了..............
images = self.driver.find_elements_by_id('id')
images[5].click
6. Appium元素等待:
强制等待:设置固定的等待时间,使用sleep()方法即可实现
from time import sleep
#强制等待5秒
sleep(5)
隐式等待:针对全部元素设置等待时间
driver.implicitly_wait(20)
显示等待:针对某个元素来设置的等待时间,方法WebDriverWait()一般和until()或until_not()方法配合使用,另外,lambda提供了一个运行时动态创建函数的方法
from selenium.webdriver.support.ui import WebDriverWait
WebDriverWait(self.driver,3).until(lambda x:x.find_element_by_id('com.tencent.mobileqq:id/btn_login'))
7. Toast元素识别:
下图为一般的toast提示,uiautomatorviewer工具是无法获取到这种toast的任何信息
代码实现:
注意如果内容为中文,必须注释#coding=utf-8,否则会因为编码导致文字识别失败
#适用toast弹窗
def get_toast(self):
error_message= "账号或密码错误,请重新输入"
limit_message=""
message1 ='//*[@text=\'{}\']'.format(error_message)
#message2 = '//*[@text=\'{}\']'.format(limit_message)
toast_element = WebDriverWait(self.driver,5).until(lambda x:x.find_element_by_xpath(message1))
print(toast_element.text)
8. 屏幕截图:
方法一:save_screenshot()该方法直接保存当前屏幕截图到当前脚本所在的文件位置
self.driver.save_screenshot('login.png')
方法二:get_screenshot_as_file(self,filename)将截图保存在指定文件路径
self.driver.get_screenshot_as_file('.\screenshots\login.png')
9. 连续滑动操作_TouchAction:
Touch Action包含一系列操作,比如按压,长按,点击,移动,暂停,组成一套动作。
按压:press()
TouchAction(driver).press(x=0,y=308)
长按:longPress() ,比press多个按的时间参数duration,以毫秒为单位
long_press(x=0,y=308,duration=1000)
点击:tap()对一个元素或是控件执行点击操作
tap(self, element=None, x=None, y=None, count=1)
移动:move_to()将指针从上一个点一道指定的元素或点
move_to(self, element=None, x=None, y=None)
暂停:Wait(),暂停脚本的执行,单位为毫秒
wait(self, ms=0)
释放:release()结束行动,取消屏幕上的指针
release(self)
执行:perform()执行的操作发送到服务器的命令操作
perform(self)
代码举例:已设置手势密码锁为例,先进入密码锁的设置页面:
#导入模块
from appium.webdriver.common.touch_action import TouchAction for i in range(2):
TouchAction(driver).press(x=243,y=381).wait(2000)\
.move_to(x=455,y=390).wait(1000) \
.move_to(x=455, y=390).wait(1000) \
.move_to(x=455, y=390).wait(1000) \
.release().perform()
10. 多点触控操作_MultiAction:
多点触控的类,可以模拟用户多点操作,主要包含add()和perform()两个方法
代码举例:以放大缩小百度地图为例
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
from appium.webdriver.common.multi_action import MultiAction
from time import sleep desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.1.1'
desired_caps['deviceName'] = '127.0.0.1:62001'
desired_caps['app'] = r'C:\Users\heber\Downloads\baidumap.apk' # 被测试的App在电脑上的位置
desired_caps['appPackage'] = 'com.baidu.BaiduMap'
desired_caps['appActivity'] = 'com.baidu.baidumaps.WelcomeScreen'
desired_caps['noReset'] = True
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) # 启动app x = driver.get_window_size()['width']
y = driver.get_window_size()['height'] def pinch():
action1 = TouchAction(driver)
action2 = TouchAction(driver)
pinch_action = MultiAction(driver) action1.press(x=x*0.2, y=y*0.2).wait(1000).move_to(x=x*0.4, y=y*0.4).wait(1000).release()
action2.press(x=x*0.8, y=y*0.8).wait(1000).move_to(x=x*0.6, y=y*0.6).wait(1000).release() pinch_action.add(action1,action2)
print("start pinch....")
pinch_action.perform() def zoom():
action1 = TouchAction(driver)
action2 = TouchAction(driver)
zoom_action = MultiAction(driver) action1.press(x=x*0.4, y=y*0.4).wait(1000).move_to(x=x*0.2, y=y*0.2).wait(1000).release()
action2.press(x=x*0.6, y=y*0.6).wait(1000).move_to(x=x*0.8, y=y*0.8).wait(1000).release() zoom_action.add(action1,action2)
print("start zoom....")
zoom_action.perform() if __name__ == '__main__':
for i in range(3):
pinch()
for i in range(3):
zoom()
appium+python搭建自动化测试框架_Appium元素定位(二)的更多相关文章
- appium+python搭建自动化测试框架_TestAPP框架(三)
Pycharm 创建 Project,搭建 APPTEST框架如下图: 1.框架功能 业务功能的封装 测试用例封装 测试包管理 截图处理 断言处理 日志获取 测试报告生成 数据驱动 数据配置 2. ...
- appium+python搭建自动化测试框架_Tools安装(一)
作者的配置环境和版本: win10 + python3.6 + Appium v1.4.16 1.下载node https://nodejs.org/en/download/, 下载node.j ...
- Appium+python自动化(十一)- 元素定位秘籍助你打通任督二脉 - 下卷(超详解)
简介 宏哥看你骨骼惊奇,印堂发亮,必是练武之奇才! 按照上一篇的节目预告,这一篇还是继续由宏哥给小伙伴们分享元素定位,是不是按照上一篇的秘籍修炼,是不是感觉到头顶盖好像被掀开,内气从头上冒出去,顿时觉 ...
- Appium+python自动化(十)- 元素定位秘籍助你打通任督二脉 - 上卷(超详解)
简介 你有道灵光从天灵盖喷出来你知道吗,年纪轻轻就有一身横练的筋骨,简直百年一见的练武奇才啊,如果有一天让你打通任督二脉,那还不飞龙上天啊.正所谓我不入地狱谁入地狱,警恶惩奸维护世界和平这个任务就交个 ...
- 学习使用Robot Framework自动化测试框架-web元素定位
转:http://blog.csdn.net/u012145166/article/details/50342569 1.name和id 其中使用到了name和id定位.但有时候由于开发人员的疏忽或者 ...
- appium+python+eclipse 自动化测试框架构建!
经过几天的慢慢研究,现将所需用的自动化框架进行了构建,在后期的代码编写中,直接在框架中套用编写对应的module.case等即可,以此来简化测试方式,提高代码的编写效率与规范 基本的架构设计流程图,如 ...
- 基于appium的app自动化测试框架
基于appium框架的app自动化测试 App自动化测试主要难点在于环境的搭建,appium完全是基于selenium进行的扩展,所以app测试框架也是基于web测试框架开发的 一.设备连接 (即构建 ...
- Python接口自动化测试框架实战 从设计到开发
第1章 课程介绍(不要错过)本章主要讲解课程的详细安排.课程学习要求.课程面向用户等,让大家很直观的对课程有整体认知! 第2章 接口测试工具Fiddler的运用本章重点讲解如何抓app\web的htt ...
- 基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码
引言 在上一篇<基于Python接口自动化测试框架(初级篇)附源码>讲过了接口自动化测试框架的搭建,最核心的模块功能就是测试数据库初始化,再来看看之前的框架结构: 可以看出testcase ...
随机推荐
- Group Convolution分组卷积,以及Depthwise Convolution和Global Depthwise Convolution
目录 写在前面 Convolution VS Group Convolution Group Convolution的用途 参考 博客:blog.shinelee.me | 博客园 | CSDN 写在 ...
- Android studio简单布局之view基本属性
本人属于自学上路,目前是在入门阶段,所以有些内容实质性比较少,请各位大佬多多包涵. 视图view的基本属性: layout_margin:定义视图与周围视图之间的空白距离 layout_padding ...
- 如何购买并配置linux服务器上的数据库
首先百度搜索阿里云 如果是学生可以学生认证 然后注册账号->个人认证->学生认证 然后你会发现 服务器一年只要114,114你买不了上当,买不了吃亏,买下面的ECS服务器,系统可以选择wi ...
- HDP 2.6 requires libtirpc-devel
HDP 2.6 requires libtirpc-devel 个问题,截止 Mustafa Kemal MAYUK 2017年06月30日 06:30 hadoopPowerSystems Hell ...
- 教你如何把openfire的muc聊天室改造为群
openfire群聊与QQ群对比 应该是去年的时候开始接触openfire,当时在分析后发现基于xmpp协议的openfire已经具备了群聊的功能.也就没太当回事,觉得加点功能就可以做成类似于QQ群的 ...
- Microsoft Power BI 学习笔记
Power Bi 学习笔记 一 Power BI 是微软发布的一系列的软件服务.应用和连接器,这些软件服务.应用和连接器协同工作,将不相关的数据源转化为合乎逻辑.视觉上逼真的交互式见解. ...
- 【TensorFlow篇】--反向传播
一.前述 反向自动求导是 TensorFlow 实现的方案,首先,它执行图的前向阶段,从输入到输出,去计算节点值,然后是反向阶段,从输出到输入去计算所有的偏导. 二.具体 1.举例 图是第二个阶段,在 ...
- android学习笔记--Scanner
private static List<String> getxxxx(Context ctx) { try { Scanner sc = new Scanner( ctx.openFil ...
- 【Netty】(7)---搭建websocket服务器
[Netty](7)---搭建websocket服务器 说明:本篇博客是基于学习某网有关视频教学. 目的:创建一个websocket服务器,获取客户端传来的数据,同时向客户端发送数据 一.服务端 1. ...
- NotificationSetUtilDemo【判断APP通知栏权限是否开启,以及如何跳转到应用程序设置界面】
前言 当APP有推送功能时,需要判断当前app在手机中是否开启了允许消息推送,否则即使添加了推送代码仍然收不到通知. 效果图 oppo上的效果: 使用步骤 一.项目组织结构图 注意事项: 1. 导入 ...