• 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()
  • 相关阅读:
    Hibernate 4.3.5 JPA实现的常见错误
    Jboss7.1中部署webservice的问题-1
    VS2015 无法启动 IIS Express Web 服务器 解决方案
    Git命令实现本地文件推送到git仓库
    VSCode 首次打开提示“Git installation not found.”解决方案
    VB6 对象库未注册问题
    【使用WCF,发布服务端浏览报错】未能从程序集“System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089” 中加载类型 “System.ServiceModel.Activation.HttpModule”。
    设计模式一一单例模式
    设计模式一一适配器模式
    .NET Framework 各版本区别(简介)
  • 原文地址:https://www.cnblogs.com/zhuxibo/p/14246253.html
Copyright © 2020-2023  润新知