溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時(shí)間:2022-07-12 10:16:10 來(lái)源:億速云 閱讀:212 作者:iii 欄目:開發(fā)技術(shù)

這篇“Python怎么利用appium實(shí)現(xiàn)模擬手機(jī)滑動(dòng)操控的操作”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“Python怎么利用appium實(shí)現(xiàn)模擬手機(jī)滑動(dòng)操控的操作”文章吧。

滑動(dòng)操控

OK,接下來(lái)我們就看一些,滑動(dòng)操控 的腳本究竟要怎么寫。

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

  • start_x:起始橫坐標(biāo)

  • start_y:起始縱坐標(biāo)

  • end_x:結(jié)束時(shí)橫坐標(biāo)

  • end_y:結(jié)束時(shí)縱坐標(biāo)

  • duration:滑動(dòng)持續(xù)時(shí)間,單位毫秒,默認(rèn)None(一般設(shè)置500-1000毫秒比較合適)

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

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

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

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

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

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

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

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

滑動(dòng)屏幕操作代碼如下:()

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

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

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

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

模擬實(shí)現(xiàn)一個(gè)簡(jiǎn)單的滑動(dòng)操作

代碼示例如下:

# coding=utf-8


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


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

# 聲明手機(jī)驅(qū)動(dòng)
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)  # 注冊(cè)到這個(gè)節(jié)點(diǎn)上,傳入 "desired_caps"。這個(gè)節(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)滑動(dòng), 屏幕從下向上滑動(dòng)
driver.swipe(width*0.5, height*0.9, width*0.5, height*0.1, 1000)
sleep(1)

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

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

# 利用 "swipe" 實(shí)現(xiàn)滑動(dòng), 屏幕從右向左滑動(dòng)
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()

將 “滑動(dòng)操控” 改為公共的方法

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

代碼示例如下:

# coding=utf-8


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


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


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

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


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


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


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


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


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


if __name__ == '__main__':
    swipeDemo()

以上就是關(guān)于“Python怎么利用appium實(shí)現(xiàn)模擬手機(jī)滑動(dòng)操控的操作”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI