欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Appium+python自動化(十)- 元素定位秘籍助你打通任督二脈

系統 1780 0

簡介

  你有道靈光從天靈蓋噴出來你知道嗎,年紀輕輕就有一身橫練的筋骨,簡直百年一見的練武奇才啊,如果有一天讓你打通任督二脈,那還不飛龍上天啊。正所謂我不入地獄誰入地獄,警惡懲奸維護世界和平這個任務就交個你了,好嗎。這本如來神掌秘籍是無價之寶,我看與你有緣,收你十塊錢傳授給你吧。想必這段經典臺詞給為都可以的耳熟能詳吧,宏哥,沒這么牛叉呼啦帶閃電,就是希望對你有幫助就可以了。

  上一篇宏哥給小伙伴們介紹完定位工具這兩個異性兄弟,這篇就給小伙伴們介紹一下定位方法。早就有小伙伴問,這個這個怎么定位,那個那個怎么定位?那么宏哥今天就告訴你,怎么怎么定位。其實定位前邊也有所涉及,只不過是一筆帶過的。這篇宏哥就給小伙伴們詳細的介紹一下。

1、 常用定位方法講解

  對象定位是自動化測試中很關鍵的一步,也可以說是最關鍵的一步,畢竟你對象都沒定位那么你想操作也不行。所以本章節的知識宏哥希望小伙伴們多動手去操作和實戰,不要僅僅只是書本上的知識,畢竟這個我只能夠舉例說明。下面我們來看我們常用的一些定位方式。

1.1 ID定位

  無論是在web自動化還是app自動化中id都是唯一的,可能有的小伙伴看到這里會有疑問,因為有的資料說是通過name定位是唯一的,為什么你這里是id呢,其實這個在之前是不沖突的,但是如果你用的是appium較新版本是不行的,在新版本中name定位被去掉了,所以在以后的定位中不會有name定位了,通常情況下我們也更喜歡用id進行定位。這里可能剛學的小伙伴會有疑問,有的時候你的應用為什么沒有id,或者說在這個手機上有但是另外的手機上沒有。1、開發沒有添加。2、android版本是4.4以下的。

我們直接看下面這張圖片吧

Appium+python自動化(十)- 元素定位秘籍助你打通任督二脈 - 上卷(超詳解)_第1張圖片

?

上面圖片中左邊部分用紅色圈出來的對象的id我們在右邊的屬性中可以看到,它的id宏哥同樣是用紅色圈出,如果我們需要對“請輸入淘寶賬戶”這個輸入框進行輸入信息,我們只需操作右邊的id就行,下面我們直接看代碼。

?

            
              1
            
             driver.find_element_by_id(
            
              "com.taobao.taobao:id/aliuser_login_account_et
            
            
              "
            
            ).send_keys(
            
              "北京宏哥
            
            
              "
            
            )
          

?

通過上面的代碼我們能夠直接在賬戶信息輸入框中輸入賬戶信息北京宏哥。可能對于無基礎的人來說這里會又點兒迷糊,這個driver是哪里來的,driver在我們配置啟動的時就已經初始化,我們只需要調用他的方法find_element_by_id。如果你的ide有自動補全功能,那么你在輸入后面的方法時會發現一個問題,為什么還有一個find_elements_by_id呢?這個在后面宏哥會講解,有興趣的小伙伴可以思考一下。

1.2 className定位

在實際工作中className定位用得相對而言會比較少。當你經常去看class時你會發現很多的className是一樣的,你沒有辦法對其進行唯一定位,下面我們看下面兩張圖片

Appium+python自動化(十)- 元素定位秘籍助你打通任督二脈 - 上卷(超詳解)_第2張圖片

Appium+python自動化(十)- 元素定位秘籍助你打通任督二脈 - 上卷(超詳解)_第3張圖片

?

我們可以仔細看一下這兩張圖片中淘寶賬號、密碼兩個輸入框中的className都是一樣的,如果在這種情況下你使用下邊這種方式去定位,你會發現你永遠定位不了密碼欄,這是為什么呢?因為在設計的時候如果你查找的元素在頁面有多個,系統會自動給你選擇第一個,所以你永遠操作不了后面的,那么在實際工作或者實戰的時候如果遇到此類問題如何解決這種問題呢?宏哥后面會講解。

?

            driver.find_element_by_class_name(
            
              "
            
            
              android.widget.EditText
            
            
              "
            
            ).send_keys(
            
              "
            
            
              北京宏哥
            
            
              "
            
            )
          

?

1.3 xpath定位

xpath定位在web自動化中是最常見的,而且也是最有效的,使用xpath定位避免了找不到元素導致報錯的問題,但是在app中使用xpath定位是一件很low的事情。為什么這么說呢?因為在宏哥過來人的經歷中只要遇見使用xpath定位元素他的反應就會比較慢,自動化的目的是為了提高效率,但是使用xpath后會降低效率,所以這里說很 low。但很多時候我們不得不去了解,下面我們大概講解一下。首先我們要熟悉一下web的xpath定位。

?

1)講web的xpath之前大家先裝一下fireFox瀏覽器,再在瀏覽器中安裝fireBug以及FirePath兩個插件。如下圖:

Appium+python自動化(十)- 元素定位秘籍助你打通任督二脈 - 上卷(超詳解)_第4張圖片

Appium+python自動化(十)- 元素定位秘籍助你打通任督二脈 - 上卷(超詳解)_第5張圖片

在自動化或者學習xpath時這兩個插件是必不可少的,這里我們直接講xpath,我們來看下面一張圖片理解一下

Appium+python自動化(十)- 元素定位秘籍助你打通任督二脈 - 上卷(超詳解)_第6張圖片

用紅色圈出有虛線的輸入框我們看一下xFirePath給我們的定位,在定位的xpath中顯示的是“.//*[@id='kw']”,這個是什么意思呢?我們來一步一步講解。1、//* ?選取文檔中的所有元素 。2、@id='kw'] ?匹配屬性為id且值為kw的節點。這里有的小伙伴可能不是很理解,說這里直接使用id進行定位就行。其實也是,但是當沒有這個屬性的時候呢?我們看下面這張圖片

Appium+python自動化(十)- 元素定位秘籍助你打通任督二脈 - 上卷(超詳解)_第7張圖片

  name定位無效的情況下,當你看到這張圖片的時候如果你不用xpath怎么定位呢?有一些抓狂的感覺吧。小伙伴可以嘗試著自己使用xpath進行定位,可能有一些人發現xpath中定位不是很明白了,為什么呢?.//*[@id='u1']/a[4] ?在這個xpath中我們沒有像之前那樣思路清晰了他多了一些層級關系,這個后面我們會仔細講。這個xpath中首先第一步1、@id='u1'和之前的一樣匹配屬性為id值為ul的節點,然后再在他的下面進行定位第二步2、/a[4] ?意思就是從根節點下選取第四個a元素。這樣一步一步解析是否更加容易理解了呢?下面我們看一下在xpath定位中經常用到的一些語法,下來大家多多練習。

Appium+python自動化(十)- 元素定位秘籍助你打通任督二脈 - 上卷(超詳解)_第8張圖片

這個是我們經常用到的,而且是最基礎的知識,只有這些沒有辦法完成很多古怪的需求,那么就有更難的,下面我們看下面的列表

Appium+python自動化(十)- 元素定位秘籍助你打通任督二脈 - 上卷(超詳解)_第9張圖片

上面這些知識都是在http://www.w3school.com.cn/xpath/xpath_examples.asp 里面,大家可以多看看,多練習。

下面我們直接看在app中xpath的使用

Appium+python自動化(十)- 元素定位秘籍助你打通任督二脈 - 上卷(超詳解)_第10張圖片

?

Appium+python自動化(十)- 元素定位秘籍助你打通任督二脈 - 上卷(超詳解)_第11張圖片

?

在上面兩張圖片中我們能夠清除的看見他們的id、className都是一樣的,這樣的情況下不用層級定位方式我們只能夠采用xpath來進行定位,首先根據前面web的學習大家可以思考一下該怎么定位。我們直接看代碼

?

            
              1
            
             driver.find_element_by_xpath(
            
              "
            
            
              //android.widget.TextView[@text='聚劃算']
            
            
              "
            
            ).click()
          

?

在xpath里面我們的語法是這樣“//android.widget.TextView[@text='JavaScript']”,這個和我們之前web的xpath一樣,意思是查找所有節點中節點為android.widget.TextView (這里使用的是className,也可以使用id,系統會依次去找)并且他的text屬性值為JavaScript,這樣是否更容易理解呢?下來多練習。這樣的定位方式不推薦,效率很慢。

2 、層級定位

2.1 什么是層級定位

  在前面的章節中我們已經提到了層級定位,只是不知道具體怎么操作而已。在很多的自動化中如果只是靠簡單的定位是沒有辦法完成自動化的,就像剛xpath定位一樣,有的元素的id、name、className都是一樣的,xpath定位效率低下,這個時候我們大多數都會采用層級定位。

2.2?項目中層級定位如何運用

下面我們舉一個簡單的例子來理解層級定位。

Appium+python自動化(十)- 元素定位秘籍助你打通任督二脈 - 上卷(超詳解)_第12張圖片

?

Appium+python自動化(十)- 元素定位秘籍助你打通任督二脈 - 上卷(超詳解)_第13張圖片

?

從上面的圖片我們可以看出id為com.taobao.taobao:id/rv_main_container的節點下面包含了很多的android.widget.FrameLayout

從下面的圖片我們可以看出id為android.widget.FrameLayout的節點下面包含了很多的android.widget.LinearLayout

? Appium+python自動化(十)- 元素定位秘籍助你打通任督二脈 - 上卷(超詳解)_第14張圖片

?

從這張圖片我們不難看出,如果我們要定位這個元素我們是沒辦法去定位的,這種情況我們大多數使用的是層級定位以及xpath,這里我們來看如何使用層級定位。

首先我們可以看出三幅圖的結構上的區別,第三幅圖的元素它是在第二幅圖里面的,第二幅圖元素它是在第一幅圖里面的,這里我們稱第一幅圖id(com.taobao.taobao:id/rv_main_container)為android.widget.FrameLayout的節點為第二幅圖元素的父節點,第二幅圖id(android.widget.FrameLayout)為android.widget.FrameLayout的節點為第三幅圖元素的父節點,第一幅圖id(com.taobao.taobao:id/rv_main_container)為android.widget.LinearLayout的節點為第三幅圖元素的祖父節點;我們只需要先通過id定位到祖父節點,然后再從祖父節點往下面依次進行定位就好。現在你可以練習一下,看和我的結果一樣嗎?看代碼:

?

            
              1
            
             element= driver.find_element_by_id(
            
              "
            
            
              com.taobao.taobao:id/rv_main_container
            
            
              "
            
            
              )

            
            
              2
            
             element1 = element.driver.find_elements_by_class_name(
            
              "
            
            
              android.widget.FrameLayout
            
            
              "
            
            
              )

            
            
              3
            
             element2 = element1[
            
              1
            
            ].find_element_by_class_name(
            
              "
            
            
              android.widget.LinearLayout
            
            
              "
            
            
              )

            
            
              4
            
             element2.click()
          

?

按照思維我們的代碼會是上面的結果,但是你去運行會發現不報錯,可也不會點擊,這個是為什么呢?我們看下面的圖片(宏哥親測,它會點擊第一個天貓,可能是默認點擊第一個吧)

?

Appium+python自動化(十)- 元素定位秘籍助你打通任督二脈 - 上卷(超詳解)_第15張圖片

?

在祖父節點下的所有子節點他的className都是“android.widget.FrameLayout”,在父節點下的所有子節點他的className都是“android.widget.LinearLayout”,這種情況下他怎么去點擊操作呢?所以在這種情況下會引發一個新的定位問題,就是宏哥在接下來要講的List定位。

2.3參考代碼

            
               1
            
             # coding=utf-
            
              8
            
            
               2
            
             # 
            
              1
            
            .先設置編碼,utf-
            
              8可支持中英文,如上,一般放在第一行

            
            
               3
            
            
               4
            
             # 
            
              2
            
            
              .注釋:包括記錄創建時間,創建人,項目名稱。

            
            
               5
            
            
              '''

            
            
               6
            
             Created on 
            
              2019
            
            -
            
              7
            
            -
            
              01
            
            
               7
            
             @author: 北京-宏哥   QQ交流群:
            
              707699217
            
            
               8
            
            
              Project:學習和使用定位元素

            
            
               9
            
            
              '''

            
            
              10
            
             # 
            
              3
            
            
              .導入模塊

            
            
              11
            
            
              from
            
            
               appium import webdriver

            
            
              12
            
            
              import time

            
            
              13
            
             desired_caps =
            
               {}

            
            
              14
            
             desired_caps[
            
              '
            
            
              platformName
            
            
              '
            
            ] = 
            
              '
            
            
              Android
            
            
              '
            
            
                 #android的apk還是IOS的ipa

            
            
              15
            
             desired_caps[
            
              '
            
            
              platformVersion
            
            
              '
            
            ] = 
            
              '
            
            
              8.0
            
            
              '
            
            
                #android系統的版本號

            
            
              16
            
             desired_caps[
            
              '
            
            
              deviceName
            
            
              '
            
            ] = 
            
              '
            
            
              127.0.0.1:62001
            
            
              '
            
            
                  #手機設備名稱,通過adb devices  查看

            
            
              17
            
             desired_caps[
            
              '
            
            
              appPackage
            
            
              '
            
            ] = 
            
              '
            
            
              com.taobao.taobao
            
            
              '
            
            
                #apk的包名

            
            
              18
            
             desired_caps[
            
              '
            
            
              appActivity
            
            
              '
            
            ] = 
            
              '
            
            
              com.taobao.tao.welcome.Welcome
            
            
              '
            
            
                #apk的launcherActivity

            
            
              19
            
             #desired_caps[
            
              '
            
            
              unicodeKeyboard
            
            
              '
            
            ] =
            
               True   #使用unicodeKeyboard的編碼方式來發送字符串

            
            
              20
            
             #desired_caps[
            
              '
            
            
              resetKeyboard
            
            
              '
            
            ] =
            
               True   #將鍵盤給隱藏起來

            
            
              21
            
             driver = webdriver.Remote(
            
              '
            
            
              http://127.0.0.1:4723/wd/hub
            
            
              '
            
            
              , desired_caps) #啟動服務器地址,后面跟的是手機信息

            
            
              22
            
            
              # 休眠五秒等待頁面加載完成

            
            
              23
            
             time.sleep(
            
              5
            
            
              )

            
            
              24
            
            
              25
            
             element= driver.find_element_by_id(
            
              "
            
            
              com.taobao.taobao:id/rv_main_container
            
            
              "
            
            
              )

            
            
              26
            
             element1 = element.find_elements_by_class_name(
            
              "
            
            
              android.widget.FrameLayout
            
            
              "
            
            
              )

            
            
              27
            
             element2 = element1[
            
              1
            
            ].find_element_by_class_name(
            
              "
            
            
              android.widget.LinearLayout
            
            
              "
            
            
              )

            
            
              28
            
            
              element2.click()

            
            
              29
            
            
              30
            
             # driver.quit()
          

小結

1、前邊介紹了一下火狐瀏覽器,這里宏哥再給小伙伴們總結一下谷歌瀏覽器如何用xpath定位,當然了,大神和大佬可以忽略不看,因為可以直接手寫xpath定位。其實看看他們的語法也很簡單,自己后期也可以嘗試手寫,看看和工具的有哪些區別,這樣可以有助于自己的提高和提升。

2、谷歌瀏覽器xpath插件下載地址https://chrome.google.com/webstore/detail/xpath-helper/hgimnogjllphhhkhlmebbmlgjoejdpjl

3、安裝方法,用谷歌瀏覽器直接訪問上邊的地址,添加以后即可。

Appium+python自動化(十)- 元素定位秘籍助你打通任督二脈 - 上卷(超詳解)_第16張圖片

?

?

Appium+python自動化(十)- 元素定位秘籍助你打通任督二脈 - 上卷(超詳解)_第17張圖片

?4、看一下如何使用和其效果

(1)谷歌瀏覽器,F12,不可以的話,可以打開“開發者工具”

(2)點擊左邊的“箭頭”,查找到要定位的元素

(3)選中控制臺的元素,鼠標右鍵,在copy里,選中“Copy XPath”

(4)copy的內容:(//*[@id="kw"])

5、注意find_element和find_elements的區別!!!

  好了,時間不多了,天也很晚了,大致就這些吧,今天就給小伙伴們就說到這里吧。

宏哥不能保證所整理都符合大家的口味,但我能保證每一篇都是用心去寫和用心去整理,我始終認同“分享的越多,你的價值增值越大”,歡迎大家關注我的博客和個人公眾號的技術分享。在分享中進步,越努力越幸運,期待我們都有美好的明天!

有的小伙伴們等不急了,留言催宏哥了,不好意思哈,宏哥說實話最近特變的忙,沒時間更新,這還是點燈熬油趕了一篇,能力有限,希望大家喜歡!!!

支持宏哥的朋友們和宏哥的宏粉記得點波推薦哦,您的肯定就是我進步的動力。鄙人先在這里給您道謝了,謝您嘞~~

個人公眾號

Appium+python自動化(十)- 元素定位秘籍助你打通任督二脈 - 上卷(超詳解)_第18張圖片

微信群

Appium+python自動化(十)- 元素定位秘籍助你打通任督二脈 - 上卷(超詳解)_第19張圖片


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品99久久久久久动医院 | 精品国产黄a∨片高清在线 亚洲3atv精品一区二区三区 | 国产中文字幕一区 | 狠狠色欧美亚洲狠狠色五 | 婷婷玖玖 | 日韩欧美一区二区三区 | 大学生a级毛片免费视频 | 亚洲第一色视频 | 久久国产欧美日韩精品 | 天天在线欧美精品免费看 | 特级毛片免费观看视频 | 欧美一区黄 | 日本三级欧美三级 | 国内自拍视频在线观看 | 波多野结衣一区二区三区 | 亚洲精品成人a | 国产精品婷婷久久久久 | 99国精产品一区二区三区A片 | 国产精品v欧美精品∨日韩 一级免费黄色免费片 | 99热在线播放 | 四虎影在线永久免费四虎地址8848aa | 污版视频在线观看 | 大香一本蕉伊线亚洲网 | www伊人网| 能看的av网站 | 久久美乳 | 久久伊人亚洲 | 人人爱天天做夜夜爽88 | 日韩有码在线观看 | 亚洲www啪成人一区二区 | 亚洲一区二区综合 | 91视频链接 | 奇米影视亚洲春色 | 国产精品久久久久久久免费大片 | 一级做a爰片久久毛片看看 欧美日韩精品国产一区二区 | 久久精品免费视频观看 | 在线看亚洲 | 午夜影院a | 久久精品亚洲精品 | 午夜精品久久久久久久99蜜桃i | 一区二区欧美视频 |