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

來源:互聯網
上載者:User

標籤:ext   介面   tool   htm   指令碼   流程   arch   運行   san   

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

  • 有的人用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: 首頁    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-8import yamlimport os# 當前指令碼路徑basepath = os.path.dirname(os.path.realpath(__file__))# yaml檔案夾yamlPagesPath = os.path.join(basepath, "pageelement")def parseyaml():    ‘‘‘    遍曆讀取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 pageElementsif __name__ == "__main__":    a = parseyaml()    print(a)    for i in a["HomePage"][‘locators‘]:        print(i)

運行結果:

下一篇講通過templetpage模板自動產生pageobject模式的代碼(用代碼去寫代碼)

 

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.