appium+python自動化49-yaml管理定位元素


前言

如何高效管理定位元素,這個是很有學問的問題,也是面試必問的[以下純屬個人觀點,勿噴!]

  • 有的人用xml管理頁面定位元素,這種逼格略高,但是小編認為學習成本大,賊麻煩。
  • 有的人提到用excel管理頁面定位元素,這種略顯逼格,至少做到了數據分離,但是讀取excel太慢,不夠高效,還得在excel里面維護,忒麻煩。
  • 有的人說把定位元素放數據庫管理,這種除了裝逼,沒覺得有多高效,當然有小伙伴提到接口測試數據量比較大的時候,這種方法還可以。
  • 有的人用pageobject模式,直接在page類寫定位方法,雖然這種沒直接把定位獨立出來,但這種非常直觀,也易於閱讀

那么有沒有一種方法,既高效,直觀,方便,又能裝逼,還能迎合面試官口味呢?接下來就是要講的這種yaml文件管理
對yaml不了解的可以看我之前發的這篇python筆記14-讀取yaml配置文件

環境:
python 3.6
appium 1.8
美團app
yaml包安裝:pip install pyyaml

PageObject

1.先回顧一下PageObject模式定位元素的寫法,如下這種:

class HomePage:
    '''dec: 首頁'''
    
    # name: 城市選擇
    city_loc = ("id", "com.sankuai.meituan:id/city_button")
    
    # name: 首頁搜索
    home_loc = ("id", "com.sankuai.meituan:id/search_edit")

yaml管理定位

1.把定位方法放到yaml文件管理,美團app首頁元素定位如下:

HomePage:
  dec: 首頁  
  # 作者:上海-悠悠 QQ交流群:330467341
  locators:
      -
        name: 城市選擇
        type: id
        value: com.sankuai.meituan:id/city_button
      -
         name: 首頁搜索
         type: id
         value: com.sankuai.meituan:id/search_edit

2.app上[我的]菜單頁定位

MyPage:
  dec: 我的
  locators:
      -
        name: 我的
        type: accessibility_id
        value: 我的
      -
         name: 請點擊登錄
         type: id
         value: com.sankuai.meituan:id/user_name

3.登錄頁面定位,這里我把登錄的幾個流程頁合並到一起了

---
LoginPage:
  dec: 登錄頁
  locators:
      -
        name: 微信登錄
        type: id
        value: com.sankuai.meituan:id/passport_button_wechat
      -
         name: 手機號登錄
         type: id
         value: com.sankuai.meituan:id/passport_button_meituan

      -
         name: 其它登錄
         type: id
         value: com.sankuai.meituan:id/passport_button_other

      -
         name: QQ
         type: xpath
         value: //*[@text='QQ']

      -
         name: 微博
         type: xpath
         value: //*[@text='微博']

      -
         name: 賬號密碼
         type: xpath
         value: //*[@text='賬號密碼']

      -
         name: 輸入賬號
         type: id
         value: com.sankuai.meituan:id/edit_account

      -
         name: 輸入密碼
         type: id
         value: com.sankuai.meituan:id/edit_password

      -
         name: 登錄按鈕
         type: id
         value: com.sankuai.meituan:id/login_button

遍歷讀取os.walk()

1.把不同頁面的元素放到對應的頁面.yaml文件里,放到同一個目錄下,方便一次性遍歷讀取

  • 在page總目錄下,建一個pageelement的文件夾(這里是文件夾,里面不要有__init__.py文件),里面放頁面元素的定位,不同的頁面定義不同的namepage.yaml.
  • templetpage放一個自動生成用例的模板(這個模板是沒后綴的文件),接下來會講
  • tools.py 用於運行代碼后自動生成pages.py腳本
  • pages.py 運行tools里面代碼后生成的

2.os.walk()遍歷讀取文件,之前有一篇專門講過了python筆記4-遍歷文件夾目錄os.walk()

# coding:utf-8
import yaml
import os
# 當前腳本路徑
basepath = os.path.dirname(os.path.realpath(__file__))
# yaml文件夾
yamlPagesPath = os.path.join(basepath, "pageelement")

def parseyaml():
    '''
    # 作者:上海-悠悠 QQ交流群:330467341
    遍歷讀取yaml文件
    '''
    pageElements = {}
    # 遍歷讀取yaml文件
    for fpath, dirname, fnames in os.walk(yamlPagesPath):
        for name in fnames:
            # yaml文件絕對路徑
            yaml_file_path = os.path.join(fpath, name)
            # 排除一些非.yaml的文件
            if ".yaml" in str(yaml_file_path):
                with open(yaml_file_path, 'r', encoding='utf-8') as f:
                    page = yaml.load(f)
                    pageElements.update(page)
    return pageElements

if __name__ == "__main__":
    a = parseyaml()
    print(a)
    for i in a["HomePage"]['locators']:
        print(i)

運行結果:

下一篇講通過templetpage模板自動生成pageobject模式的代碼(用代碼去寫代碼)
上海-悠悠 QQ交流群:330467341


免責聲明!

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



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