日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python写appium_案例分享,Python +appium做登录功能

發布時間:2023/12/19 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python写appium_案例分享,Python +appium做登录功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原標題:案例分享,Python +appium做登錄功能

Appium 是一個自動化測試開源工具,支持 iOS 平臺和 Android 平臺上的原生應用,同時又是一個跨平臺的工具:它允許測試人員在不同的平臺(iOS,Android)使用同一套API來寫自動化測試腳本,這樣大大增加了iOS和Android測試套件間代碼的復用性。

而python語言,作為當下流行的編程語言來說,成為軟件測試人員及公司的首選,很多公司都以此為參考數據。

既然如此,這個給大家演示簡單的一個登錄功能:

第一層是自己的定義一個工具層,封裝了幾種定位和四種滑動:

from appium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

'''工具類'''

class baseTools:

'''初始化方法'''

def __init__(self,appPackage,appActivity):

'''方法一'''

# dictionary = {}#定義空字典

# dictionary['platformName'] = 'Android'

# dictionary['platformVersion'] = '6.0.1'

# dictionary['noReset'] = True

# dictionary['deviceName'] = 'b973aad5'

# dictionary['appPackage'] = appPackage

# dictionary['appActivity'] = appActivity

'''方法二'''

desired_caps = {

'platformName':'Android', # 平臺名

'platformVersion':'6.0.1',# 平臺版本號

'noReset':True, # 不重置

'deviceName':'b973aad5', # 設備名字

'appPackage':appPackage, # app包名

'appActivity':appActivity # app 主Activity

}

# 驅動連接

self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

'''id定位'''

def MyfindID(self,id):

ID = (By.ID,id)

WebDriverWait(self.driver,30,0.1).until(EC.presence_of_all_elements_located(ID))

return self.driver.find_element_by_id(id)

'''xpath定位'''

def MyfindXPATH(self, xpath):

XPATH = (By.XPATH, xpath)

WebDriverWait(self.driver, 30, 0.1).until(EC.presence_of_all_elements_located(XPATH))

return self.driver.find_element_by_xpath(xpath)

'''name定位'''

def MyfindNAME(self, name):

NAME = (By.NAME, name)

WebDriverWait(self.driver, 30, 0.1).until(EC.presence_of_all_elements_located(NAME))

return self.driver.find_element_by_name(name)

'''class_name定位元素'''

def MyfindCLASS_NAME(self, class_name):

CLASS_NAME = (By.CLASS_NAME, class_name)

WebDriverWait(self.driver, 30, 0.1).until(EC.presence_of_all_elements_located(CLASS_NAME))

return self.driver.find_element_by_class_name(class_name)

'''link_name定位'''

def MyfindLINK_TEXT(self, link_text):

LINK_TEXT = (By.LINK_TEXT, link_text)

WebDriverWait(self.driver, 30, 0.1).until(EC.presence_of_all_elements_located(LINK_TEXT))

return self.driver.find_element_by_name(link_text)

'''

全屏滑動

上下滑動 X軸(寬)不變,Y軸(高)交換位置

左右滑動 Y軸(高)不變,X軸(寬)交換位置

'''

def MySwipe(self, direction, n, duration = 1000): # direction為滑動方向(t,d,l,r 四個參數), # n為滑動次數(n應為整數) duration 為間隔時間

if direction == 't': # top 上滑動

d = self.driver

width = d.get_window_size()['width'] #獲取寬度

height = d.get_window_size()['height'] #獲取高度

for i in range(n):

d.swipe(width * 0.5, height * 0.75, width * 0.5, height * 0.25,duration)

elif direction == 'd': # down 下滑動

d = self.driver

width = d.get_window_size()['width']

height = d.get_window_size()['height']

for i in range(n):

d.swipe(width * 0.5, height * 0.25, width * 0.5, height * 0.75, duration)

elif direction == 'l': # left 左滑動

d = self.driver

width = d.get_window_size()['width']

height = d.get_window_size()['height']

for i in range(n):

d.swipe(width * 0.75, height * 0.5, width * 0.25, height * 0.5, duration)

elif direction == 'r': # right 右滑動

d = self.driver

width = d.get_window_size()['width']

height = d.get_window_size()['height']

for i in range(n):

d.swipe(width * 0.25, height * 0.5, width * 0.75, height * 0.5, duration)

'''返回driver'''

def Mydriver(self):

return self.driver

第二層是UI層,封裝所有能看的見操作主要有點擊輸入獲取文本:

'''導入工具類'''

from Tool_Package.tools.TOOL import baseTools

import unittest

from HTMLTestRunner import HTMLTestRunner

'''UI層'''

class uiAction():

'''初始化'''

def __init__(self,appPackage,appActivity):

'''創建對象,引入baseTools'''

self.d = baseTools(appPackage,appActivity)

'''點擊'''

def about_click(self, locate, type): # 參數type 判斷傳入定位參數的類型,調用不同的定位方式

if type == 'id':

self.d.MyfindID(locate).click()

elif type == 'xpath':

self.d.MyfindXPATH(locate).click()

elif type == 'name':

self.d.MyfindNAME(locate).click()

elif type == 'className':

self.d.MyfindCLASS_NAME(locate).click()

elif type == 'linkText':

self.d.MyfindLINK_TEXT(locate).click()

'''輸入'''

def about_input(self,locate,value,type): # 參數type 判斷傳入定位參數的類型,調用不同的定位方式

if type == 'id':

self.d.MyfindID(locate).send_keys(value)

elif type == 'xpath':

self.d.MyfindXPATH(locate).send_keys(value)

elif type == 'name':

self.d.MyfindNAME(locate).send_keys(value)

elif type == 'className':

self.d.MyfindCLASS_NAME(locate).send_keys(value)

elif type == 'linkText':

self.d.MyfindLINK_TEXT(locate).send_keys(value)

'''滑動'''

def about_swipe(self,direction,n):

self.d.MySwipe(direction,n)

'''切換到H5'''

def Switch_webview(self):

self.d.driver._switch_to.context('WEBVIEW_cn.com.gsh.guoshihui')

'''切換為原生'''

def Switch_native(self):

self.d.driver._switch_to.context('NATIVE_APP')

'''獲取文本內容并返回數據'''

def get_text(self,locate,type): # type判斷傳入定位參數的類型

if type == 'id':

str_Content = self.d.MyfindID(locate).text

return str_Content

elif type == 'xpath':

str_Content = self.d.MyfindXPATH(locate).text

return str_Content

'''退出'''

def tearDown(self):

self.d.driver.quit()

第三層是服務層,幾乎所有的實參都在此層傳輸:

from Tool_Package.tools.TOOL import baseTools

import unittest

from HTMLTestRunner import HTMLTestRunner

# QQ 登錄

class business():

def __init__(self,appPackage,appActivity):

self.qq = uiAction(appPackage,appActivity)

'''登錄'''

def Login(self):

self.qq.about_input('android.widget.EditText','1796065407','className') # 輸入用戶名

self.qq.about_input('com.tencent.mobileqq:id/password','***********','id') #輸入密碼

self.qq.about_click('com.tencent.mobileqq:id/login','id') #點擊登錄按鈕

'''清理'''

def tui(self):

self.qq.tearDown()

最后一層采用unittest框架,根據用例調用方法,并打印測試報告。

from Tool_Package.tools.TOOL import baseTools

import unittest

from HTMLTestRunner import HTMLTestRunner

'''

此層調用方法,執行用例

使用unittest框架

'''

class Case(unittest.TestCase):

'''

初始化方法此處傳入的兩個參數為QQ的 Package(包名)和主Activity

'''

def setUp(self):

self.cs = business('com.tencent.mobileqq','.activity.SplashActivity')

'''調用登錄方法'''

def test_login(self):

u'''QQ登錄'''

self.cs.Login()

'''退出'''

def t(self):

self.cs.tui()

if __name__ == '__main__':

suite = unittest.TestSuite()

suite.addTest(Case('test_login'))

# 創建文件并設置編碼

file = open('result.html', 'w+', encoding='utf-8')

# 標題

t = 'QQ登錄自動化測試'

# 描述

desc = 'This is MaZhengguang TEST REPORT'

# 測試報告

runner = HTMLTestRunner(stream=file, title=t, deion=desc)

# 運行

runner.run(suite)返回搜狐,查看更多

責任編輯:

總結

以上是生活随笔為你收集整理的python写appium_案例分享,Python +appium做登录功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。