appium---定位封裝


  自動化測試講究的是簡單,快捷,便於維護。對於自動化維護這一塊最重要的也就屬元素定位了。

思路

寫代碼之前我們養成先把思路理清楚,這樣再寫代碼的時候才不會不知道如何下手了。

1、通過yaml(或者其他工具)管理元素和定位方法

2、封裝讀取yaml(或者其他工具)函數

3、通過讀取yaml信息把定位信息和元素分離出來並填入對應的定位方法中

PS:這里通過淘寶登陸練習。

編寫元素和定位方法

這里我們可以把頁面元素和定位方法通過yaml數據進行填寫在同一個yaml中。

這里安靜通過“>”進行把定位方法(by)和元素內容進行分開了,方便后面進行提取。

# element。yaml

login:
登錄 username: id>com.taobao.taobao:id/aliuser_login_mobile_et password: android>resourceId("com.taobao.taobao:id/aliuser_register_sms_code_et") login_button: className>android.widget.Button

讀取封裝的yaml函數

這里封裝一個函數進行讀取yaml文件內容。

# read_yaml.py

import
yaml import os class GetYaml(): def __init__(self,file_path): # 判斷文件是否存在 if os.path.exists(file_path): self.file_path = file_path else: print('沒有找到%s文件路徑'%file_path) self.data = self.read_yaml() def read_yaml(self): with open(self.file_path,'r',encoding='utf-8')as f: p = f.read() return p def get_data(self,key=None): result = yaml.load(self.data,Loader=yaml.FullLoader) if key == None: return result else: return result.get(key) if __name__ == '__main__': read_yaml = GetYaml('element.yaml') xx = read_yaml.get_data('login') print(xx)

封裝定位方法

好了,最重要的封裝定位來了。

小思路:

1、前面也提到了,如果元素和定位方法都寫在了一起,首先要把其分開;

2、需要對定位方法進行判斷,然后把元素放入到對應的定位方法中;

3、這里為了保證代碼的正常運行,安靜這里直接運用了顯示等待的方法。

# coding:utf-8
# get_by_local.py

from common.read_yaml import GetYaml from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC class GetByLocal: def __init__(self,driver): self.driver = driver def get_element(self,path,key): # 獲取到yaml地址,並進行讀取器 yaml_data = GetYaml(path) local = yaml_data.get_data(key) if local != None: by = local.split('>')[0] local_by = local.split('>')[1] try: if by == 'id': element = WebDriverWait(self.driver, 10, 0.5).until(lambda x: x.find_element_by_id(local_by)) elif by == 'className': element = WebDriverWait(self.driver, 10, 0.5).until(lambda x: x.find_element_by_class_name(local_by)) elif by == 'xpath': element = WebDriverWait(self.driver, 10, 0.5).until(lambda x: x.find_element_by_xptah(local_by)) elif by == 'android': element = WebDriverWait(self.driver, 10, 0.5).until(lambda x: x.find_element_by_android_uiautomator(local_by)) else: loc = (by,local_by) # 元祖 element = WebDriverWait(self.driver, 10, 0.5).until(EC.presence_of_element_located(loc)) return element except: return None else: return None

提取頁面信息

這里運用了安靜把一個頁面上的元素的封裝到一個文件中了,方便我們進行使用和調用

注:安靜這里只把用戶名,密碼,已經登錄按鈕的提取出來了,小伙伴們也可以把其他的一起寫進來(忘記密碼,注冊,以及顯示toast方法)

# login_page.py
# coding:utf-8

from common.get_by_local import GetByLocal

class LoginPage:
    def __init__(self,driver):
        self.get_by_local = GetByLocal(driver)
    def get_username_element(self,path):
        return self.get_by_local.get_element(path,'username')

    def get_password_element(self,path):
        return  self.get_by_local.get_element(path,'password')

    def get_login_button_element(self,path):
        return self.get_by_local.get_element(path,'login_button')

編寫用例

前面的准備工作都已經完成了,這里我們開始編寫測試用例了。(這里沒有用unittest的方法,只是簡單的走一個流程,注重的是方法)

from appium import webdriver
from pages.login_page import LoginPage
import time
import os
path  =os.path.dirname(os.getcwd())
# 獲取到yaml文件路徑
yaml_path = os.path.join(os.path.join(path,'config'),'element.yaml')
class BaseDriver:
    def android_driver(self):
        desired_caps = {
                         'platformName': 'Android',  # 測試版本
                         'deviceName': 'emulator-5554',   # 設備名
                         'platformVersion': '5.1.1', # 系統版本
                        "appPackage": "com.taobao.taobao",   # app包名
                        "appActivity": "com.ali.user.mobile.login.ui.UserLoginActivity",   # 啟動launch Activity
                        "noReset": True,  # 不清空數據
                        "unicodeKeyboard": True,    # 使用Unicode編碼方式發送字符串
                        "resetKeyboard": True,      # 鍵盤隱藏起來
                                }
        driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
        return driver
    def login(self,driver):
            page =LoginPage(driver)
            time.sleep(8)
            # 獲取用戶名元素以及輸入內容
            use = page.get_username_element(yaml_path)
            use.send_keys('1111')
            # 獲取密碼元素以及輸入內容
            pas = page.get_password_element(yaml_path)
            pas.send_keys('22222')
            # 進行點擊登錄
            button = page.get_login_button_element(yaml_path)
            button.click()

if __name__ == '__main__':
    x = BaseDriver()
    xx = x.android_driver()
    x.login(xx)

 

安靜通過小的例子來完成了對元素和定位方法的封裝,后面我們的自動化代碼就便於維護,定位元素更改了,我們只需要在yaml文件中進行更改。減少了維護成本。

封裝方法千千萬,哪種方便用哪種,僅供參考。

 

看完安靜的博客,如果對您有幫助,可以在右下角點個關注,哪里有不會的或者不懂的,可以下方留言。持續更新中。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM