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

本文详细介绍了使用Appium和Python进行移动应用自动化测试时的各种元素定位方法,包括id、class、相对定位、xpath、List定位等,并讲解了Appium元素等待、Toast元素识别、屏幕截图、连续滑动操作以及多点触控操作的实现,为自动化测试提供了全面的指导。
摘要由CSDN通过智能技术生成

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属性不唯一,元素不唯一的话定位会报错了)

42f2726f22ae14d23897f8266614ab05.png

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截屏:

93d9b7db809276391cd498bb6145c50f.png

9f8bba9a273d8fce901ed1d3610b72db.png

4. xpath定位:

280f3ff8dcb7886b2c115302a98fd7a4.png

代码举例:

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截屏:

7dc6cb2a5bc76b0712bcd7e0fa3a96f9.png

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的任何信息

938154e9b3958b99588a855934bb3cc4.png

代码实现:

注意如果内容为中文,必须注释#coding=utf-8,否则会因为编码导致文字识别失败

48304ba5e6f9fe08f3fa1abda7d326ab.png

#适用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)

48304ba5e6f9fe08f3fa1abda7d326ab.png

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)

代码举例:已设置手势密码锁为例,先进入密码锁的设置页面:

48304ba5e6f9fe08f3fa1abda7d326ab.png

#导入模块

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

10. 多点触控操作_MultiAction:

多点触控的类,可以模拟用户多点操作,主要包含add()和perform()两个方法

代码举例:以放大缩小百度地图为例

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值