《自拍教程48》Python adb隨機地圖移圖2小時

Android車載地圖測試,涉及:高德地圖100m比例尺下,拖動地圖進行移圖操作2個小時,
預期結果:移圖正常,地圖渲染正常,不會出現卡死卡滯界面異常等情況。


準備階段
  1. 在高德地圖App界面,調整比例尺到100m
  2. adb shell input swipe x1 y1 x2 y2 , 可以模擬從(x1, y1)座標點滑動到(x2, y2)座標點
  3. 座標可以通過設置-》開發者選項-》打開指針位置(座標),可以查看拍照按鈕的具體座標(x,y)值
  4. 移圖2小時,可以設置循環輪詢,通過時間戳判斷是否達到了7200s
  5. 需要實現上下左右隨機移圖。

Python批處理腳本形式
# coding=utf-8

import os
import time
import random

timeout = 7200  # 循環移圖2小時(7200s)
now_time = time.time()  # 獲取當前時間戳,並保存到一個變量

# 循環獲取當前時間,與now_time變量做時間戳做減法
while time.time() - now_time <= timeout:
    # 從(500, 200)這個座標點滑動到(1300,600)
    x_1 = random.randint(500, 1300)
    y_1 = random.randint(200, 600)
    x_2 = random.randint(500, 1300)
    y_2 = random.randint(200, 600)
    command = "adb shell input swipe %s %s %s %s" % (x_1, y_1, x_2, y_2)
    print(command)
    os.system(command)
    time.sleep(0.5)  # 移圖後,間隔0.5s,再進行下一次移圖
    print("Have been moved %s seconds..., Total %s seconds" % (time.time() - now_time, timeout))

os.system("pause")

Python面向過程函數形式

先分出2個主要功能函數來:
xy_random() : 座標隨機函數;
move_map(): 地圖移圖函數,需要考慮傳參7200s,
函數一般用小寫加下劃線的命名規則。

# coding=utf-8

import os
import time
import random


def xy_random(x1, y1, x2, y2):
    x_1 = random.randint(x1, x2)
    y_1 = random.randint(y1, y2)
    x_2 = random.randint(x1, x2)
    y_2 = random.randint(y1, y2)
    return x_1, y_1, x_2, y_2


def move_map(timeout):
    now_time = time.time()  # 獲取當前時間戳,並保存到一個變量
    while time.time() - now_time <= timeout:  # 循環獲取當前時間,與now_time變量做時間戳做減法
        x_1, y_1, x_2, y_2 = xy_random(500, 200, 1300, 600)  # 從(500, 200)這個座標點滑動到(1300,600)
        command = "adb shell input swipe %s %s %s %s" % (x_1, y_1, x_2, y_2)
        print(command)
        os.system(command)
        time.sleep(0.5)  # 移圖後,間隔0.5s,再進行下一次移圖
        print("Have been moved %s seconds..., Total %s seconds" % (time.time() - now_time, timeout))


move_map(7200)
os.system("pause")

Python面向對象類形式
  1. 以"萬物皆可歸類"的思想, 先抽象化出幾個類來,
    類名一般建議用"名詞", 所以我們命名爲"MapMover"(駝峯首字母大寫),
    這個xy_random()其實也可以做成類的形式,只是沒必要,
    因爲這個函數可以後續給其他函數公用。
  2. 養成良好的類的初始化(init)的習慣,
    初始化過程中, 可以pass(什麼都不做)
  3. 這個MapMover 類, 目前只需要一個地圖移圖的函數(動作功能)就足夠了,
    函數的命名一般建議用"動詞", 所以我們命名爲: “move_map” .
  4. 類是一個抽象的事物, 必須實例化成具體的對象後,
    才能進行調用, 所以我們實例化並命名成了m_obj, 表明是一個對象.
  5. 實例化成具體對象後, 對象就可以調用move_map這個函數了.
# coding=utf-8

import os
import time
import random


def xy_random(x1, y1, x2, y2):
    x_1 = random.randint(x1, x2)
    y_1 = random.randint(y1, y2)
    x_2 = random.randint(x1, x2)
    y_2 = random.randint(y1, y2)
    return x_1, y_1, x_2, y_2


class MapMover(object):
    def __init__(self):
        pass

    def move_map(self, timeout):
        now_time = time.time()  # 獲取當前時間戳,並保存到一個變量
        while time.time() - now_time <= timeout:  # 循環獲取當前時間,與now_time變量做時間戳做減法
            x_1, y_1, x_2, y_2 = xy_random(500, 200, 1300, 600)  # 從(500, 200)這個座標點滑動到(1300,600)
            command = "adb shell input swipe %s %s %s %s" % (x_1, y_1, x_2, y_2)
            print(command)
            os.system(command)
            time.sleep(0.5)  # 移圖後,間隔0.5s,再進行下一次移圖
            print("Have been moved %s seconds..., Total %s seconds" % (time.time() - now_time, timeout))


if __name__ == '__main__':
    m_obj = MapMover()
    m_obj.move_map(7200)
    os.system("pause")

運行方式及效果

確保Android車機設備通過USB線與電腦連接了,adb設備有效連接,
以上代碼的3種實現形式都可以直接運行,
比如保存爲move_map_100.py並放在桌面,
建議python move_map_100.py運行,當然也可以雙擊運行。
運行效果如下:



更多更好的原創文章,請訪問官方網站:www.zipython.com
自拍教程(自動化測試Python教程,武散人編著)
原文鏈接:https://www.zipython.com/#/detail?id=f5f74ce2c0b24a4d9c46c0ba95c483e4
也可關注“武散人”微信訂閱號,隨時接受文章推送。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章