Appium實現安卓ui自動化/壓測 一、使用方法 二、常用的一些方法

一、使用方法

1.查找App的包名和進程名稱

adb shell dumpsys window windows | findstr mCurrentFocus


2.輸入內容鏈接到app



3.點擊開啓錄製


4.錄製需要的步驟即可

5.錄製的部分自動生成代碼


6.如果需要壓測,把相關代碼copy出來,新建python文件,將其寫入到for循環中即可。

二、常用的一些方法

def screen_shot(self, appPath):

"""

    獲取當前設備的截圖,導出到指定目錄"""

    self.shelltimeout("/system/bin/screencap -p /sdcard/temp.png", 10)

self.pull('/sdcard/temp.png', appPath)

self.shelltimeout("rm /sdcard/temp.png", 5)

def get_wifi_name(self):

"""

    查詢連接wifi名稱"""

    for packagein self.shell_output('dumpsys wifi').splitlines():

if package.startswith('mWifiInfo'):

wifi_name = re.findall(r'SSID:([^"]+), BSSID', package)

if not wifi_name:

return ''

            else:

return wifi_name[0].strip()

def touch_by_element(self, element):

"""

    點擊元素    usage: touchByElement(Element().findElementByName(u"計算器"))

"""

    self.shelltimeout("input tap %s %s" % (str(element[0]), str(element[1])), 30)

time.sleep(0.5)

def get_focused_package_xml(self, save_path):

file_name = random.randint(1, 999)

self.shelltimeout(

'uiautomator dump /data/local/tmp/{}.xml'.format(file_name), 10)

self.pull('/data/local/tmp/%s.xml' % file_name, save_path)

def get_focused_package_and_activity(self):

"""

    獲取當前應用界面的包名和Activity,返回的字符串格式爲:packageName/activityName

"""

    output =self.shell_output('dumpsys window windows | grep mCurrentFocus')

output = output.strip().split()

if output[-1].endswith('}'):

return output[-1][:-1]

else:

return output[-1]

def get_current_package_name(self):

"""

    獲取當前運行的應用的包名"""

    pkg =self.get_focused_package_and_activity().split("/")

if len(pkg) >0:

return pkg[0]

else:

return ''

def get_current_activity(self):

"""

    獲取當前運行應用的activity

"""

    pkg =self.get_focused_package_and_activity().split("/")

if len(pkg) >0:

return pkg[-1]

else:

return ''

def get_matching_app_list(self, keyword):

"""

    模糊查詢與keyword匹配的應用包名列表usage: getMatchingAppList("com.gitvdemo.video")

"""

    matApp = []

for packagein self.shell_output('pm list packages %s' % keyword).strip().splitlines():

package_info = package.split(":")

if len(package_info) >0:

if '=' in package_info[1]:

matApp.append(package_info[1].split('=')[1])

else:

matApp.append(package.split(":")[-1])

return matApp

def list_dir(self, _dir, find_str=None):

dirs =self.shell_output('ls ' + _dir)

if find_str:

grep_cmd = [find_util, find_str]

p =self.Popen(grep_cmd, stdin=subprocess.PIPE)

out, err = p.communicate(dirs)

return out.strip()

else:

return dirs

def is_install(self, packageName):

"""

    判斷應用是否安裝,已安裝返回True,否則返回False

usage: isInstall("com.gitvdemo.video")

"""

    if self.get_matching_app_list(packageName):

return True

    else:

return False

def specifies_app_version_name(self, package):

"""

    獲取指定應用的versionName

    :param package:應用包名    :return: 包名,versionName

"""

    versionName =""

    versionCode =""

    for packagein self.shell_output('dumpsys package %s' % package).splitlines():

if 'versionName' in package:

versionName = package.split('=', 2)[1].strip()

if 'versionCode' in package:

versionCode = package.split()[0].split('=', 2)[1].strip()

return versionName +"-" + versionCode

def get_app_version_name(self, package):

"""

    獲取指定應用的versionName

    :param package:應用包名    :return: 包名"""

    versionName =""

    for packagein self.shell_output('dumpsys package %s' % package).splitlines():

if 'versionName' in package:

versionName = package.split('=', 2)[1].strip()

return versionName

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