Appium之選擇/操做元素

Appium是如何選擇、操做元素的呢?css

     appium自動化  ------  選擇界面 元素python

     操做元素  ------- ① 點擊android

                            ② 輸入字符web

                            ③ 拖拽session

                            ④ 獲取頁面元素的各類屬性app

     根據appium獲取的數據進行分析和處理工具

如何查看界面元素呢?測試

      用到工具    在Androidsdk目錄下  tools ->bin ->uiautomatorviewer.bat  雙擊打開ui

選擇APP頁面元素的三種方式spa

      選擇元素的代碼

              與selenium基本相同

              * find_element_by_xxx  符合條件的第一個元素,找不到拋出異常

              * find_elements_by_xxx  符合條件的全部元素的列表,找不到返回空列表

              * 經過webDriver 查找範圍是整個界面樹形結構

              * 經過webelement 查找範圍是該節點的子節點

      選擇元素的方法

          ① 根據ID     ------    driver.find_element_id('xxxx')

          ② 根據class  name   --------   driver.find_element_by_class_name("android.widget.TextView")

                   class屬性決定了界面元素的類型

                   若是咱們要查找的是某種類型的界面元素,並且這種類型的界面元素在當前界面中只有一個

          ③ 根據accessibility  id     ------   driver.find_element_by_accessibility_id('unique name')

                   content-desc屬性是用來描述該元素的做用

                   若是要查詢的界面元素的content-desc屬性,在當前頁面中惟一就用它

                   不過,通常開發人員不喜歡填寫它。

          ④ 根據xpath

                    在appium中,咱們無法使用css,由於css是web專用的。appium支持xpath來定位元素。

                    舉例:   driver.find_element_by_xpath('//ele/ele2[@attr="a1"]')

                                xpath = "//*[@resource-id='io.manong.developerdaily:id/tab_bar_container']//android.widget.TextView[3]"

                                xpath = "//*[@resource-id='io.manong.developerdaily:id/tab_bar_container']//android.widget.TextView[@text='發現']"

                                eles = driver.find_element_by_xpath(xpath)[2]

                    注意:在xpath中表示下標是從1開始的,而在python中表示下標是從0開始的。

                    每一個節點對應class屬性   相對不成熟,不少時候是正確的語法也不能找出元素來

定位元素時遇到過的坑: 常常報EOF錯誤,幾種解決辦法

        - 關掉appium server ,而後再次打開uiautomatorviewer.bat

        - 電腦上不能有手機助手,有的話都關掉

        - 重啓手機,從新鏈接  adb devices

        - 刪除測試包,從新下載,重啓uiautomatorviewer

Inspetor定位:

      由於用UIAutomator viewer工具不能實時定位元素,能夠在appium server 界面上點擊放大鏡,填寫相應的name  value,而後start session一下,

就能夠實現圖形與元素實時定位。固然Inspetor還能夠驗證xpath表達式。

     經過Inspactor中的Attach to Session就能夠知道是什麼設備。

     如何查看session id   能夠在代碼中加入  print(driver.session_id)

tap方法:與click方法相似,都是點擊界面。

      區別是:tap方法是針對座標定位;而click方法是點擊方法。

      tap方法適用場景:在選擇不到元素的狀況下,咱們就能夠經過座標來實現定位。

        driver.find_element_by_class_name('...')   #  等待界面出現

        driver.tap([918,413], 4556)    #  有兩個參數  元素位置和點擊持續時間(ms)

 ==若是是不一樣分辨率的手機,用座標定位就很不許確。能夠將不一樣分辨率的對應元素座標通通寫在配置文件裏,而後調用。

      config.py文件裏這樣寫:

         coordinates = {

                 '1080p':{

                       '首頁_+' : (548, 1839),

                       '登陸頁 _郵箱圖標' :(147, 1802),

                       '登陸頁_郵箱地址'  :(264, 370),

                       '登陸頁_郵箱密碼'  :(264, 570),

                       ‘登陸頁_登陸按鈕’  :(264, 780)

                  },

                  '720p':{

                       '首頁_+' : (640, 1250),

                       .......

                  },

                  '2k':{

                       .......

                   }

         }

         cfg_phone_resolution = '1080p'

    調用的時候,先導包  如 :from appium_code.configs import coordinates,cfg_phone_resolution

     而後須要用到時,如:coordinate = coordinates['1080p']

                                         driver.tap([coordinate['首頁_+']], 300)

                                         .....

相關文章
相關標籤/搜索