zoukankan      html  css  js  c++  java
  • Python+Appium自动化测试(8)-swipe()滑动页面

    app自动化测试过程中,经常会遇到滑动屏幕操作,appium框架的话我们可以使用webdriver提供的swipe()方法来对屏幕页面进行上滑、下滑、左滑、右滑操作。

    一,swipe方法介绍

    • swipe()方法源码如下:

      swipe()方法的参数说明:

      start_x:起始横坐标

      start_y:起始纵坐标

      end_x:结束时横坐标

      end_y:结束时纵坐标

      duration:滑动持续时间,单位毫秒,默认None(一般设置500-1000毫秒比较合适)

    • duration参数需要注意的是,在移动设备上滑动时间的快慢所形成的效果是不一样的。以今日头条APP首页上滑为例,同样的滑动距离,滑动较快则出现类似翻页的效果,而滑动较慢则是同一则新闻从起始位置滑动到结束位置。

    • 手机屏幕的坐标:以手机屏幕左上角为坐标中心(0, 0),向右话滑动则纵坐标不变,横坐标变大;向下滑动则横坐标不变,纵坐标变大。在uiautomatorviewer中可以元素左上角坐标与右下角的坐标,如下图中"视频"按钮

    • 因为不同测试机屏幕的尺寸很可能有差异,所以一般不使用固定的的坐标来滑动屏幕,而是先获取测试机屏幕尺寸,再通过获取的手机屏幕尺寸来确定滑动的起始、结束坐标,这样在我们更换了测试手机后不需要更改方法。使用webdriver提供的get_window_size()方法可以获取屏幕尺寸(即屏幕右下角的坐标),方法如下:

    # 屏幕宽
    width = driver.get_window_size()['width']
    # 屏幕高
    height = driver.get_window_size()['heigth']
    
    • 滑动屏幕操作代码如下:
    # 屏幕从下向上滑动
    driver.swipe(width*0.5, height*0.9, width*0.5, height*0.1, 1000)
    # 屏幕从上向下滑动
    driver.swipe(width*0.5, height*0.1, width*0.5, height*0.9, 1000)
    # 屏幕从左向右滑动
    driver.swipe(width*0.1, height*0.5, width*0.9, height*0.5, 1000)
    # 屏幕从右向左滑动
    driver.swipe(width*0.9, height*0.5, width*0.1, height*0.5, 1000)
    

    二,重新封装

    我们还可以将滑动屏幕的操作封装成方法,方便后续调用

    # project/common/baseOpera.py
    
    class BaseOpera(object):
        '''
        基础操作
        '''
        def __init__(self, driver):
            self.driver = driver
            self.duration = 1000
    
        @property
        def width(self):
            '''获取屏幕宽度'''
            return self.driver.get_window_size()['width']
    
        @property
        def height(self):
            '''获取屏幕高度'''
            return self.driver.get_window_size()['height']
    
        def swipe_to_left(self, base=0.1):
            '''从右向左滑动'''
            return self.driver.swipe(self.width*(1-base),
                                        self.height*0.5,
                                        self.width*base,
                                        self.height*0.5,
                                        self.duration
                                        )
    
        def swipe_to_right(self, base=0.1):
            '''从左向右滑动'''
            return self.driver.swipe(self.width*base,
                                        self.height*0.5,
                                        self.width*(1-base),
                                        self.height*0.5,
                                        self.duration
                                        )
    
        def swipe_to_top(self, base=0.9):
            '''从下向上滑动'''
            return self.driver.swipe(self.width*0.5,
                                        self.height*base,
                                        self.width*0.5,
                                        self.height*(1-base),
                                        self.duration
                                        )
    
        def swipe_to_bottom(self, base=0.9):
            '''从上向下滑动'''
            return self.driver.swipe(self.width*0.5,
                                        self.height*(1-base),
                                        self.width*0.5,
                                        self.height*base,
                                        self.duration
                                        )
    

    三,示例

    调用baseOpera.py模块中的滑动方法,向上滑动查看今日头条首页新闻,简单示意如下:

    from appium import webdriver
    from common.baseOpera import BaseOpera
    
    def android_driver():
        desired_caps = {
            "platformName": "Android",
            "platformVersion": "10",
            "deviceName": "PCT_AL10",
            "appPackage": "com.ss.android.article.news",
            "appActivity": ".activity.MainActivity",
            "automationName": "uiautomator2",
            "unicodeKeyboard": True,
            "resetKeyboard": True,
        }
        # 启动app
        driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
        return driver
    
    def watch_news():
        # 向上滑动今日头条首页
        driver = android_driver()
        bo = BaseOpera(driver)
        bo.swipe_to_top()
    
    if __name__ == '__main__':
        watch_new()
    
  • 相关阅读:
    数据预处理
    数据挖掘-聚类分析
    数据挖掘分类--判别式模型 ----支持向量机
    神经网络
    数据挖掘-贝叶斯定理
    数据挖掘之分类和预测
    关于stm32的IO口的封装
    星际炸弹——炸弹爆炸时间计算
    共阳极数码管三极管驱动
    自定义的TIME.H头文件
  • 原文地址:https://www.cnblogs.com/lfr0123/p/13626543.html
Copyright © 2011-2022 走看看