自動化測試講究的是簡單,快捷,便於維護。對於自動化維護這一塊最重要的也就屬元素定位了。
思路
寫代碼之前我們養成先把思路理清楚,這樣再寫代碼的時候才不會不知道如何下手了。
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文件中進行更改。減少了維護成本。
封裝方法千千萬,哪種方便用哪種,僅供參考。
看完安靜的博客,如果對您有幫助,可以在右下角點個關注,哪里有不會的或者不懂的,可以下方留言。持續更新中。