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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM