Appium之選擇/操作元素


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

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

     操作元素  ------- ① 點擊

                            ② 輸入字符

                            ③ 拖拽

                            ④ 獲取頁面元素的各種屬性

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

如何查看界面元素呢?

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

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

      選擇元素的代碼

              與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)

                                         .....


免責聲明!

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



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