最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python利用appium實(shí)現(xiàn)模擬手機(jī)滑動操控的操作

 更新時間:2022年07月09日 08:05:07   作者:全棧哈士奇  
Appium 是一個開源、跨平臺的自動化測試工具,用于測試原生和輕量移動應(yīng)用,支持 iOS, Android 和 FirefoxOS 平臺。本文將利用appium實(shí)現(xiàn)模擬手機(jī)滑動操控的操作,感興趣的可以了解一下

其實(shí)在前面兩個章節(jié)的元素定位的場景,我們已經(jīng)對 app 中的自動化操作已經(jīng)略知一二。這里我們發(fā)現(xiàn), 實(shí)際上 appium 復(fù)用了 selenium 的很多很多的操作方式,所以像一些 “點(diǎn)擊、輸入” 等操作,這種常規(guī)的操作的方式與在 WEB 自動化中的方式基本上是完全一致的,就不再進(jìn)行贅述了。

唯一一個與 WEB 端不太一樣的地方就是關(guān)于 “滑動操控” ,所以 “頁面的滑動” 在實(shí)際操作手機(jī)過程中,也是最常使用的,只需要操控一個點(diǎn)在屏幕中拖動到另外一個點(diǎn)就可以了。這個 “滑” 的過程就是一個滑動的動作。

在 “appium” 中,對于 “滑動” 的操作也做了一些簡單的封裝,為其提供了方法,這就是 “swipe” 。

滑動操控

OK,接下來我們就看一些,滑動操控 的腳本究竟要怎么寫。

在模擬 “滑動操控” 的時候,使用的方法就是 swipe() ,該方法的參數(shù)說明如下:

  • start_x:起始橫坐標(biāo)
  • start_y:起始縱坐標(biāo)
  • end_x:結(jié)束時橫坐標(biāo)
  • end_y:結(jié)束時縱坐標(biāo)
  • duration:滑動持續(xù)時間,單位毫秒,默認(rèn)None(一般設(shè)置500-1000毫秒比較合適)

ps:如果不設(shè)置 "duration" ,即為 0秒 ,無法看到滑動效果。

duration 參數(shù)需要注意的是:在移動設(shè)備上滑動時間的快慢所形成的效果是不一樣的。以今日頭條APP首頁上滑為例,同樣的滑動距離,滑動較快則出現(xiàn)類似翻頁的效果,而滑動較慢則是同一則新聞從起始位置滑動到結(jié)束位置。

手機(jī)屏幕的坐標(biāo):以手機(jī)屏幕最左上角的坐標(biāo)點(diǎn)為坐標(biāo)中心(0, 0),向右話滑動則縱坐標(biāo)不變,橫坐標(biāo)變大;向下滑動則橫坐標(biāo)不變,縱坐標(biāo)變大。

如何獲取設(shè)備屏幕坐標(biāo)系

在實(shí)際工作場景中,不同測試機(jī)的屏幕尺寸存在著很大的差異性。所以正常情況下,我們不會選擇使用固定的的坐標(biāo)來滑動屏幕。

一般操作是,先獲取測試機(jī)屏幕尺寸,再通過獲取的手機(jī)屏幕尺寸來確定滑動的起始、結(jié)束坐標(biāo);這樣,即使在我們更換了測試手機(jī)后也不需要重新更改坐標(biāo)。使用webdriver提供的get_window_size()方法可以獲取屏幕尺寸(即屏幕右下角的坐標(biāo)),方法如下:

# 獲取屏幕寬度
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)
sleep(1)

# 屏幕從上向下滑動
driver.swipe(width*0.5, height*0.1, width*0.5, height*0.9, 1000)
sleep(1)

# 屏幕從左向右滑動
driver.swipe(width*0.1, height*0.5, width*0.9, height*0.5, 1000)
sleep(1)

# 屏幕從右向左滑動
driver.swipe(width*0.9, height*0.5, width*0.1, height*0.5, 1000)
sleep(1)

模擬實(shí)現(xiàn)一個簡單的滑動操作

代碼示例如下:

# coding=utf-8


from time import sleep
from appium import webdriver    # appium 的特色就是將安卓、IOS的底層封裝成了 webdriver 類型的語句
from appium.webdriver.common.appiumby import By


# 啟動參數(shù)
desired_caps = {}       # 定義 desired_caps 變量,用以賦值很多的啟動信息
desired_caps['platformName'] = 'Android'    # 設(shè)備名稱、系統(tǒng)為 "Android"
desired_caps['platformVersion'] = '7.1.2'   # 這里是在夜神模擬器的設(shè)置中心查看安卓版本是 "7.1.2" ,后續(xù)會告訴大家如何切換版本
desired_caps['deviceName'] = '127.0.0.1:62001'     # 這里如果是真機(jī)的話填寫的是設(shè)備名稱;因?yàn)槲覀冇玫氖悄M器,填寫的是IP端口號
# desired_caps['appPackage'] = 'com.baidu.searchbox'     # APP 的包名;這里我們使用的是通訊錄
# desired_caps['appActivity'] = 'com.baidu.searchbox.SplashActivity'    # 啟動的界面的名字(也或者叫啟動名,默認(rèn)是 "." 開頭的)
# desired_caps['automationName']='UiAutomator1'

# 聲明手機(jī)驅(qū)動
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)  # 注冊到這個節(jié)點(diǎn)上,傳入 "desired_caps"。這個節(jié)點(diǎn)就是 "appium" 開啟的端口節(jié)點(diǎn)

sleep(1)

# 獲取屏幕寬度
width = driver.get_window_size()['width']

# 獲取屏幕高度
height = driver.get_window_size()['height']

# 利用 "swipe" 實(shí)現(xiàn)滑動, 屏幕從下向上滑動
driver.swipe(width*0.5, height*0.9, width*0.5, height*0.1, 1000)
sleep(1)

# 利用 "swipe" 實(shí)現(xiàn)滑動, 屏幕從上向下滑動
driver.swipe(width*0.5, height*0.1, width*0.5, height*0.9, 1000)
sleep(1)

# 利用 "swipe" 實(shí)現(xiàn)滑動, 屏幕從左向右滑動
driver.swipe(width*0.1, height*0.5, width*0.9, height*0.5, 1000)
sleep(1)

# 利用 "swipe" 實(shí)現(xiàn)滑動, 屏幕從右向左滑動
driver.swipe(width*0.9, height*0.5, width*0.1, height*0.5, 1000)
sleep(1)

driver.terminate_app('com.baidu.searchbox')
# driver.quit()

將 “滑動操控” 改為公共的方法

上文中的腳本雖然也能夠?qū)崿F(xiàn)我們針對 App 的 “滑動操控” 的操作,但是代碼的整潔度上來看不是那么的美觀。既然如此,我們是否能夠?qū)⑵浞庋b起來,變成一個公共的方法,當(dāng)然是可以的了,繼續(xù)往下看。

代碼示例如下:

# coding=utf-8


from time import sleep
from appium import webdriver    # appium 的特色就是將安卓、IOS的底層封裝成了 webdriver 類型的語句


def getSize(driver):
    """獲取頁面大小"""
    x = driver.get_window_size()['width']
    y = driver.get_window_size()['height']
    return(x, y)


def swipeRight(driver):
    """向右滑動 - [x軸變動,y軸不變]"""
    l = getSize(driver)
    x1 = int(l[0]*0.8)
    x2 = int(l[0]*0.2)
    y = int(l[1]*0.5)
    driver.swipe(x1, y, x2, y, 1000)


def swipeLeft(driver):
    """向左滑動 - [x軸變動,y軸不變]"""
    l = getSize(driver)
    x1 = int(l[0]*0.9)
    x2 = int(l[0]*0.1)
    y = int(l[1]*0.5)
    driver.swipe(x2, y, x1, y, 1000)


def swipeDown(driver):
    """向下滑動 - [x軸不變,y軸變動]"""
    l = getSize(driver)
    y1 = int(l[1]*0.9)
    y2 = int(l[1]*0.1)
    x = int(l[0]*0.5)
    driver.swipe(x, y1, x, y2, 1000)


def swipeUp(driver):
    """向上滑動 - [x軸不變,y軸變動]"""
    l = getSize(driver)
    y1 = int(l[1]*0.8)
    y2 = int(l[1]*0.2)
    x = int(l[0]*0.5)
    driver.swipe(x, y2, x, y1, 1000)


def swipeDemo():
    # 啟動參數(shù)
    desired_caps = {}       # 定義 desired_caps 變量,用以賦值很多的啟動信息
    desired_caps['platformName'] = 'Android'    # 設(shè)備名稱、系統(tǒng)為 "Android"
    desired_caps['platformVersion'] = '7.1.2'   # 這里是在夜神模擬器的設(shè)置中心查看安卓版本是 "7.1.2" ,后續(xù)會告訴大家如何切換版本
    desired_caps['deviceName'] = '127.0.0.1:62001'     # 這里如果是真機(jī)的話填寫的是設(shè)備名稱;因?yàn)槲覀冇玫氖悄M器,填寫的是IP端口號
    # desired_caps['appPackage'] = 'com.baidu.searchbox'     # APP 的包名;這里我們使用的是通訊錄
    # desired_caps['appActivity'] = 'com.baidu.searchbox.SplashActivity'    # 啟動的界面的名字(也或者叫啟動名,默認(rèn)是 "." 開頭的)
    # desired_caps['automationName']='UiAutomator1'

    # 聲明手機(jī)驅(qū)動
    driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)  # 注冊到這個節(jié)點(diǎn)上,傳入 "desired_caps"。這個節(jié)點(diǎn)就是 "appium" 開啟的端口節(jié)點(diǎn)
    sleep(1)


    # 利用 "swipe" 實(shí)現(xiàn)滑動, 屏幕從下向上滑動
    swipeDown(driver)
    sleep(2)


    # 利用 "swipe" 實(shí)現(xiàn)滑動, 屏幕從上向下滑動
    swipeUp(driver)
    sleep(2)


    # 利用 "swipe" 實(shí)現(xiàn)滑動, 屏幕從左向右滑動
    swipeLeft(driver)
    sleep(2)


    # 利用 "swipe" 實(shí)現(xiàn)滑動, 屏幕從右向左滑動
    swipeRight(driver)
    sleep(2)


    driver.terminate_app('com.baidu.searchbox')
    # driver.quit()


if __name__ == '__main__':
    swipeDemo()

其實(shí)滑動在實(shí)際操作中應(yīng)用的場景還是不少的,就比如要定位的元素在頁面下方必須要通過滑動才能往下滑將其展示出來;再比如解鎖密碼、或者滑動九宮格之類的場景… 類似的滑動場景,大家可以在真實(shí)的場景中逐步的去體驗(yàn)。

到此,一個很簡單的基于 “百度App” 實(shí)現(xiàn)的 demo 就到此結(jié)束了。但是該 demo 僅僅是基于實(shí)現(xiàn),沒有像之前的 WEB 框架那樣去同意做處理、去進(jìn)行 PO 模式的編寫。

到此這篇關(guān)于Python利用appium實(shí)現(xiàn)模擬手機(jī)滑動操控的操作的文章就介紹到這了,更多相關(guān)Python appium手機(jī)滑動操控內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python基于百度API識別并提取圖片中文字

    Python基于百度API識別并提取圖片中文字

    本文主要實(shí)現(xiàn)了利用百度 AI 開發(fā)平臺的 OCR 文字識別 API 識別并提取圖片中的文字。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 如何使用Cython對python代碼進(jìn)行加密

    如何使用Cython對python代碼進(jìn)行加密

    這篇文章主要介紹了如何使用Cython對python代碼進(jìn)行加密,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Python對象體系深入分析

    Python對象體系深入分析

    這篇文章主要介紹了Python對象體系,以實(shí)例的形式進(jìn)行了較為深入的分析,需要的朋友可以參考下
    2014-10-10
  • Python中import導(dǎo)入不同目錄的模塊方法詳解

    Python中import導(dǎo)入不同目錄的模塊方法詳解

    這篇文章主要介紹了Python中import導(dǎo)入不同目錄的模塊方法詳解,需要的朋友可以參考下
    2020-02-02
  • 解決python運(yùn)行效率不高的問題

    解決python運(yùn)行效率不高的問題

    在本篇文章中小編給大家分享了關(guān)于解決python運(yùn)行效率不高的問題,有需要的朋友們可以跟著學(xué)習(xí)下。
    2020-07-07
  • Python3 mmap內(nèi)存映射文件示例解析

    Python3 mmap內(nèi)存映射文件示例解析

    這篇文章主要介紹了Python3 mmap內(nèi)存映射文件示例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Python將多個圖像合并輸出的實(shí)現(xiàn)方法

    Python將多個圖像合并輸出的實(shí)現(xiàn)方法

    這篇文章主要介紹了Python將多個圖像合并輸出的實(shí)現(xiàn)方法,本文介紹了兩種將多個圖像合并為一個輸出的方法:使用PIL庫或使用OpenCV和NumPy,這些庫都可以使用Python中的簡單語法和少量的代碼來完成此任務(wù),需要的朋友可以參考下
    2023-06-06
  • 解決List.append()?在?Python?中不起作用的問題

    解決List.append()?在?Python?中不起作用的問題

    在?Python?中,我們通常使用?List.append()?方法向列表末尾添加元素,然而,在某些情況下,你可能會遇到?List.append()?方法不起作用的問題,本文將詳細(xì)討論這個問題并提供解決方法,需要的朋友可以參考下
    2023-06-06
  • Python處理unicode字符的方法詳解

    Python處理unicode字符的方法詳解

    這篇文章主要介紹了Python處理unicode字符的方法詳解,unicodedata中定義了所有Unicode字符的字符屬性,主要包含兩個功能,其一是根據(jù)名字查找字符;其二是給定字符查找其對應(yīng)的信息,需要的朋友可以參考下
    2023-08-08
  • pycharm設(shè)置注釋顏色的方法

    pycharm設(shè)置注釋顏色的方法

    今天小編就為大家分享一篇pycharm設(shè)置注釋顏色的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05

最新評論

九寨沟县| 偏关县| 尉氏县| 平南县| 瑞昌市| 九龙城区| 高州市| 凌云县| 高青县| 平凉市| 阿巴嘎旗| 曲松县| 嵩明县| 白河县| 华池县| 九龙县| 察哈| 孟村| 施秉县| 田东县| 偃师市| 阜城县| 长武县| 明光市| 时尚| 邵阳县| 花莲市| 邵阳县| 阿尔山市| 石泉县| 台中市| 峡江县| 安平县| 聊城市| 越西县| 南昌市| 岐山县| 西和县| 临漳县| 四平市| 白城市|