美文网首页
『与善仁』Appium基础 — 40.模拟手势点击坐标

『与善仁』Appium基础 — 40.模拟手势点击坐标

作者: 繁华似锦Fighting | 来源:发表于2020-12-13 09:13 被阅读0次

    1、模拟手势点击坐标

    在定位元素的时候,你使出了十八班武艺还是定位不到,怎么办呢?(面试经常会问)
    那就拿出绝招:点击元素所在位置的坐标。(坐标定位)

    详细说明:

    如下图定位"去看看"这个元素,除了坐标属性,其他没有可用于定位的属性信息了。这个时候就需要用坐标来进行定位点击了。

    下图中可以看到右侧bonds属性:[374,831][654,906],我的理解是第一个坐标是红框框长方形的左上角坐标,第二个坐标是红框框长方形的右下角坐标,所以如果我想要点击红框框的内容,只要【374654,831906】之间的任意一个坐标都可以用。

    2、tap()用法

    tap()方法并不是我们之前说过的TouchAction类中的tap()方法,该tap()方法是模拟手势触摸的方法。

    tap()方法介绍:

    # 可模拟手指点击(最多五个手指),可设置按住时间长度(毫秒) :
    tap(self, positions, duration=None)
    
    参数Args: 
        positions : list(列表)类型,里面对象是元组,最多五个。
            如:[(100, 20), (100, 60)],
            元组中一个元素表示一个坐标, 元组中最多可有5个坐标。   
        duration : 持续时间,单位毫秒,如:500 
        
    # 调用方式
    driver.tap([(100, 20), (100, 60), (100, 100)], 500)
    

    3、练习

    """
    1.学习目标
        熟悉tap方法使用,当元素没有任何明确属性的时候,可以使用,来定位元素,
    2.操作步骤
        2.1 熟悉tap方法:触摸,不同于TouchAction中的tap方法
        2.2 调用方式
            driver.tap(positions,duration=None)
        2.3 说明:
            driver.tap([坐标,最多5个坐标],持续时间)
            参数:
                --positions 坐标 列表格式[(x,y),(x,y),(x,y)]
                    列表中每个元组表示一个坐标
                --duration 持续时间
    
    3.需求
        设置app中使用tap方法点击"通知"选项
    """
    
    # 1.导入appium和TouchAction
    import time
    from appium import webdriver
    
    # 2.创建Desired capabilities对象,添加启动参数
    desired_caps = {
        "platformName": "Android",  # 系统名称
        "platformVersion": "7.1.2",  # 系统版本
        "deviceName": "127.0.0.1:21503",  # 设备名称
        "appPackage": "com.android.settings",  # APP包名
        "appActivity": ".Settings"  # APP启动名
    }
    
    # 3.启动APP
    driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
    
    # 4.操作APP
    # 使用tap方法点击设置app页面中"通知"选项,
    # 通过元素定位工具UI Automator Viewer,可以知道"通知"的坐标范围[108,894][720,965]
    # x轴 范围  108--720
    # y轴 范围  894--965
    # 页面等待
    driver.wait_activity(".Settings", 10)
    
    # 点击"通知"选项
    driver.tap([(120, 900)], 3000)
    
    # 注:持续时间有和没有,在效果上区别不是很大。
    
    # 5.关闭APP
    time.sleep(3)
    driver.quit()
    

    提示:

    因为之前一直用的click()方法进行点击,click()方法是定位元素后才进行点击操作的。

    而页面中的坐标信息是一直存在的,所以tap()方法会直接运行,所以脚本执行的时候,没有点击效果,是因为执行坐标定位点击操作的时候,元素还没有出现。

    因此tap()触摸方法前面务必加上延时或者判断!!!

    4、弊端

    通过坐标定位是元素定位的下下策,实在没办法才用这个,另外如果换了其他手机,分辨率就会不一样,这个坐标就不能写死了,得算出所在屏幕的比例。

    注意: 不到万不得已不要用tap()触摸方法,因为不同手机分辨率不同,同样的元素在不同手机的位置不同。

    相关文章

      网友评论

          本文标题:『与善仁』Appium基础 — 40.模拟手势点击坐标

          本文链接:https://www.haomeiwen.com/subject/wligwktx.html