appium定位方法

1.根据resource-id定位

driver.find_element_by_id('com.alpha.lagouapk:id/result_Search')

2.根据content-desc 也就是accessibility id获取元素

driver.find_element_by_accessibility_id('面板').click()

3.根据xpath

driver.find_element_by_xpath('//*[@属性名=属性值"]')

4.根据坐标模拟点击:

  场景:无法定位到目标元素,采取的一种补救方法

  确定:不是针对于元素操作,必须等目标元素出现才有相应的交互效果。不同分辨率的屏幕或造成误差

#获取当前元素的宽度高度
size=driver.get_window_size()

 

#通过坐标模拟点击某一个属性。最多传5个坐标
driver.tap([(坐标1)])

 

 

 示列:

#导包
import time

from appium import webdriver

#准备自动化配置信息
desired_caps={
    #移动设备平台
    'platformName':'Android',
    #平台OS版本号
    'plathformVersion':'8',
    #设备的名称--值可以随便写
    'deviceName':'test0106',
    #提供被测app的信息-包名,入口信息
    #com.renaissance.bingzhe/.UnityPlayerActivity
    'appPackage':'com.renaissance.bingzhe',
    'appActivity':'.UnityPlayerActivity',
    #确保自动化之后不重置app
    'noReset':True,
    #设置session的超时时间,单位秒
    'newCommandTimeout':6000,
    #指定自动化驱动
    'automationName':'UiAutomator2',
}

driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
driver.implicitly_wait(10)  #只有目标元素没有出现的时候才会触发
time.sleep(20)
print('开始点击')
#模拟坐标点击按钮
#driver.tap([(750,60)])  #只有当目标控件出现的时候点击才有效果

#如果屏幕的分辨率不同但是比例一致,可以用相对屏幕尺寸的方法来获取坐标
size=driver.get_window_size()  #'width', 'height'
width=size['width']
height=size['height']
#宽度的11/16
pos_x=width/16*11
#高度的1/32
pos_y=height/32
print(pos_x,pos_y)
driver.tap([(pos_x,pos_y)])

time.sleep(10)

driver.quit()

 

 

5.长按: 最后一个参数代表点击几秒。不传默认点击。如果传了代表长按单位为毫秒

driver=webdriver.Remote('http://localhost:4723/wd/hub',desktop_caps)

#等待5秒种
time.sleep(5)
#长按3秒
driver.tap([(500,800)],3000)

 

6.模拟打开通知栏

driver.open_notifications()

7.关闭通知栏--模拟发送返回键

driver.keyevent(4)

具体keyevent()里面需要传操作对应的编号:

编码表:https://www.cnblogs.com/zhuminghui/p/10470865.html

代码列子:

#打开通知栏
import time

from appium_basicCode.teacher_code.day3.conf import boss_caps
from appium import webdriver
#初始化driver对象-用于控制手机
driver=webdriver.Remote('http://localhost:4723/wd/hub',boss_caps)
#隐士等待的触发条件是?--获取元素,且当前页面没有该元素才会触发

driver.implicitly_wait(10)#稳定元素

#模拟打开通知栏
driver.open_notifications()

time.sleep(5)
#关闭通知栏--模拟发送返回键
driver.keyevent(4)
# driver.press_keycode(4)  效果同上

input('打开通知栏')

driver.quit()

 

8.左滑右滑:

5个参数:开始滑动的横坐标。纵坐标。滑动到的位置横坐标、纵坐标。多长时间滑动一次。

driver.swipe(start_x, start_y, end_x, end_y, 2000)

 代码列子:

import time

from appium_basicCode.teacher_code.day3.conf import boss_caps
from appium import webdriver

driver = webdriver.Remote('http://localhost:4723/wd/hub',boss_caps)
driver.implicitly_wait(10)
time.sleep(10)#等待主页面出现
#滑动练习
#获取当前元素的宽度高度
size=driver.get_window_size()
start_x=size['width']/2
start_y=size['height']/4*3
end_x=start_x  #上下滑动x不变
block=driver.find_elements_by_xpath('//*[@resource-id="com.hpbr.bosszhipin:id/lv_list"]/*[1]')[1]

distance=block.size['height']+5 #块的高度作为滑动距离

end_y=start_y-distance  #起点减去滑动距离等于终点
#driver.swipe(start_x,start_y,end_x,end_y,1000)  #针对屏幕操作


#滑动应用场景---边滑动边找元素
#先看界面有没有目标,如果没有就滑动,有就停下来
def search_job(target):
    while 1:
        #循环退出的条件是找到目标元素
        job=driver.find_element_by_id('com.hpbr.bosszhipin:id/tv_position_name')
        if target in job.text:
            print('找到目标工作')
            break
        driver.swipe(start_x, start_y, end_x, end_y, 2000)

search_job('测试开发')
driver.quit()

 

posted @ 2021-01-07 14:28  西西cc  阅读(191)  评论(0编辑  收藏  举报