appium+python搭建自动化测试框架_Appium元素定位(二)

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()

原文地址:https://www.cnblogs.com/zhichao-123/p/11824759.html

时间: 2024-07-31 02:18:01

appium+python搭建自动化测试框架_Appium元素定位(二)的相关文章

appium+python搭建自动化测试框架_TestAPP框架(三)

Pycharm 创建 Project,搭建 APPTEST框架如下图: 1.框架功能 业务功能的封装 测试用例封装 测试包管理 截图处理 断言处理 日志获取 测试报告生成 数据驱动 数据配置 2. driver封装 config文件夹创建app_config.yaml 文件,存放配置app的配置信息 platformName: Android platformVersion: 5.1.1 deviceName: 127.0.0.1:62001 #mx4真机 #platformVersion: 5

appium+python搭建自动化测试框架_Tools安装(一)

1.下载node   https://nodejs.org/en/download/, 下载node.js   验证安装: node -v 2.下载jdk  https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html?utm_source=androiddevtools&utm_medium=website 配置环境变量: JAVA_HOME     jdk安装路径 CLASSPATH 

Appium+python自动化(十一)- 元素定位秘籍助你打通任督二脉 - 下卷(超详解)

简介 宏哥看你骨骼惊奇,印堂发亮,必是练武之奇才! 按照上一篇的节目预告,这一篇还是继续由宏哥给小伙伴们分享元素定位,是不是按照上一篇的秘籍修炼,是不是感觉到头顶盖好像被掀开,内气从头上冒出去,顿时觉得整个身体都融化了,而且身轻如燕啊!而且控制不住手,想要动手操作一番呢?那还在等什么呢,和宏哥一起练起来吧!!! 1. List定位 List故名思义就是一个列表,在python里面也有list这一个说法,如果你不是很理解什么是list,这里暂且理解为一个数组或者说一个集合.首先一个list是一个集

学习使用Robot Framework自动化测试框架-web元素定位

转:http://blog.csdn.net/u012145166/article/details/50342569 1.name和id 其中使用到了name和id定位.但有时候由于开发人员的疏忽或者开发习惯的问题,会漏写name或者id属性.或者有时候如果页面很庞大,元素很多,也有可能出现两个一不小心定义了两个重复的id的情况.这样就无法进行唯一定位了. 2.xpath 前面所说的id和name属性就相当于是一个人的姓名.你可以通过姓名找到他.但是同名同姓的问题是存在的,而且有时候也不知道他的

基于appium的app自动化测试框架

基于appium框架的app自动化测试 App自动化测试主要难点在于环境的搭建,appium完全是基于selenium进行的扩展,所以app测试框架也是基于web测试框架开发的 一.设备连接 (即构建基础的测试环境,保证可以驱动设备进行操作) 0.准备测试环境 1)安装jdk配置java_home环境变量: 2)安装Android SDK(安卓软件开发包)(adb.appt ) 3)安装nodejs,并通过npm安装appium 1.获取app包名appPackage 在cmd命令行中输入aap

Python接口自动化测试框架实战 从设计到开发

第1章 课程介绍(不要错过)本章主要讲解课程的详细安排.课程学习要求.课程面向用户等,让大家很直观的对课程有整体认知! 第2章 接口测试工具Fiddler的运用本章重点讲解如何抓app\web的http\https请求包.如何模拟请求数据.过滤规则及修改响应数据.如何解决无法抓包问题        以及fiddler接口测试,让大家能应用好工具! 第3章 Requests常见方法实战运用本章重点讲解 get\post请求测试.接口测试中结果处理.上传\下载文件接口测试.请求中header及coo

Python搭建网站框架

1. 机器上安装python 省略 2. 机器上安装python的easy_install 下载一个ez_setup.py文件 进入该文件路径下,运行该文件:运行结束后,文件下<python路径>\Scripts多了easy_install.exe 将这个exe文件的路径加入环境变量path下,这个时候在任何情况下都可以使用easy_install解析python框架了 3. 在你的web框架下,使用easy_install安装你的frame框架. 运行结束frame框架就安装在你的机器上了.

Appium+python移动自动化测试(四)--Monitor/uiautomatorviewer工具及元素定位方法

写在前面: 本文介绍识别元素的工具和元素的定位方法,识别元素的工具主要有uiautomator和monitor,以及Appium Inspector(Windows下小编在1.7.0之后版本可使用,1.4.16版本不行),本系列教程用的appium1.4.16本文,故暂不介绍Appium Inspector. 一.常用的识别元素的工具介绍 启动uiautomatorviewer.bat/monitor.bat.打开sdk/tools目录找到uiautomatorviewer.bat/monito

Appium基于Python APP自动化测试框架 -- PO

关于对自动化测试框架PO的认识详见之前我写的博客:http://www.cnblogs.com/hanxiaobei/p/6755329.html 本篇主要是说appium自动化测试如何有PO的设计思想来实现. PO模型的目录结构: 其中,main.py为框架的主入口,test_creat.py调用creat_page.py,creat_page.py调用base_page.py. PO代码示例: main.py 1 import unittest 2 import HTMLTestRunner