日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python+appium判断元素存在_python自动化测试应用--Appium元素篇

發布時間:2025/3/19 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python+appium判断元素存在_python自动化测试应用--Appium元素篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.1概要

本篇將對和界面元素相關的內容做講解,比如,查找元素的幾種常見方法,還將介紹如何查看app界面上的元素去做定位,最后還將新手經常遇到的問題做個簡單的回答。

1.2 查找app界面元素的工具

我們先來看看如何找到app界面上的元素,以及它有哪些特點需要我們關注的。首先進入我們的android的sdk文件夾,目錄為C:\Program Files (x86)\Android\android-sdk\tools

在tools文件夾下有個uiautomatorviewer.bat批處理文件,點開會運行一個叫UI Automator Viewer的工具。如圖

接下來將我們的手機連接上電腦,啟動手機的app,這里我們繼續以今題頭條為例子,打開今日頭條,然后點擊工具左上角的綠色手機圖標,等待幾秒,結果會出現下圖的樣子

當我們的鼠標點擊到‘推薦’上時,看右側的信息。主要關注resource-id,class這兩個標識內容將會是我們后面在腳本里定位元素的主要信息。大家可以先自己熟悉一下這個工具,鼠標在不同的元素上切換看看效果。還記得我們在上一篇腳本中的操作步驟嗎?第一步是點擊我們的‘熱點’按鈕將app顯示內容切換到熱點板塊,而腳本里是這樣實現的

els=driver.find_elements_by_id('p_')

els[1].click()

大家看一下我們‘熱點’按鍵的resource-id是什么,同樣也是com.ss.android.article.news:id/p_和‘推薦’的id一樣,同理后面并排的一系列id都是一樣的。如果簡單來說,我們找到了元素并獲取到元素的id后,我們在腳本里只需要這樣寫就好了

driver.find_element_by_id('p_')

如果要操作點擊

driver.find_element_by_id('p_').click()

但是,我們的實戰碰到的情況是什么呢,今日頭條的頂部各個模塊的元素id都是一樣的,這樣我們就要根據這個情況,去找id都是'p_'的一個集合,當然集合里的第一個元素就是我們的‘推薦’模塊,第二個元素就是‘熱點’模塊,以此類推。所以我們的腳本就要這樣去寫了

els=driver.find_elements_by_id('p_') #通過find_elements_by_id注意是加s的

els[1].click()#對els集合的第二個元素進行點擊操作。

1.3 python中查找元素的方法

工欲善其事必先利其器,這里先推薦大家一個好用的IDE—PyCharm。它的智能補全代碼功能非常好用,如下圖

好了接下來我們來看看appium幾個常用的找元素的方法:

1. find_element_by_id() / find_elements_by_id()

2. find_element_by_class_name() / find_elements_by_class_name()

你沒看錯,不是我漏寫了,就這兩種。有些童鞋可能要問了,find開頭的方法不是有很多嗎?是啊從上面的截圖也能看出來,什么by_tag_name、by_name、by_xpath,by_blabla…。

我在這里強調的是常用,好用,實戰里用到出現頻率最多的就是這兩種了。當然在我的下個系列里(學習selenium文章),在web端查找頁面元素的方法就會豐富許多。前面提到的

UI Automator Viewer讓大家注意的兩個地方就是id和class了。在平時在做培訓時,經常會遇到這樣的問題,很多人會覺得的找元素好難。當每次結束培訓后大家會了解難得不是找元素,而是怎么通過編程的思路去在合適的時間找到對應的元素。因為find方法是死的,就這幾種,為什么別人能找到而我找不到?其實這里展現的問題就是很多人忽略掉的問題本質,你要找的頁面元素在你的程序執行所在的界面位置嗎?

舉個簡單的例子,來闡述這個問題的含義:比如app的操作是在點擊某個界面的一個元素A后進入下一個界面,我們要對下一個界面的某個元素B再進行點擊操作。這時我們的腳本可能是這樣寫的

driver.find_element_by_id(A).click()

driver.find_element_by_id(B).click()

大家來看看,這樣寫我們在執行python腳本后會順利執行嗎?答案只有一個Maybe。也許可能不會出錯,但多數情況下會報錯,返回無法找到元素B。這時看出原因的童鞋就要說了在driver.find_element_by_id(B).click()加上一句driver.implicitly_wait(10)或是sleep,腳本就變成這樣

driver.find_element_by_id(A).click()

driver.implicitly_wait(10)

driver.find_element_by_id(B).click()

好了,這里先解釋一下driver.implicitly_wait(10)這句的含義(給初識的筒子普及一下)

這句的含義是程序等待,等待什么呢?就是等待它的下一句里要找的元素B,直到B被找到為止,當然要加一個期限一萬年,呵呵開句玩笑,直到10秒超時。也就是說在10秒內什么時候B出現了程序就會開始繼續往下執行。當然這里的超時時間可以任意指定,一般我們指定在10秒是個比較適合的時間。它被稱作“智能等待”,思維活絡的童鞋可能就要問了,難道還有非智能的等待嗎?當然有了,那就是我們的time.sleep()方法,在import我們的time包后,time.sleep(10)就是實實在在的讓程序等上10秒才繼續往下執行代碼。好,到這里說出智能等待的童鞋臉上會露出得意的笑啊,得意的笑…我這時也要問了這樣寫我們在執行python腳本后會順利執行嗎?答案也只有一個,可以,肯定,必須能順利執行。但是這里要反轉了,雖然腳本能夠順利執行,但是最后執行的結果一定是我們想的哪樣嗎?答案只有一個Maybe。為什么?Why?我們不是做了等待嗎,腳本不是也順利找到B元素了嗎?好了公布答案,回到我們的app里,兩個界面,A元素在前一個界面,B元素在下一個界面,我們腳本里通過id找到了B,那如果說A元素所在的界面也有一個和B元素同樣id的元素呢?最后我們腳本的執行結果就是在第一個界面點擊A后緊接著又點擊了當前界面的另一個“B”元素。大家仔細回味一下這個情況,而且此情況會在實戰里經常碰到。好了回過頭我們看看上一篇我們的那個對今日頭條的操作的demo

driver.find_element_by_id('ab0').click()

while 1:

if driver.current_activity=='com.ss.android.article.base.feature.search.SearchActivity':

break

driver.find_element_by_id('ll').send_keys('lamecho')

driver.find_element_by_id('o9').click()

情況是不是很像,逐條分析一下這幾行。在進首頁點擊了'ab0'后,我們在while循環里對當前的界面activity做判斷,如果獲取到當前的activity是查找界面的名稱,那么我們break退出循環,再去找'll'并給他輸入“lamecho”字符串,最后點擊'o9'搜索。花這么長的篇幅來說明這個情況,就是要說剛才的那句話“難得不是找元素,而是怎么通過編程的思路去在合適的時間找到對應的元素”。這個時間就是我們在以后的自動化實現上需要去關注和考慮的問題,而找元素那只是自動化必須要有的一個步驟而已。

接下來我們再對find_elements_by_id()和find_elements_by_class_name()做個簡要的說明。細心的童鞋可能發現了element變成了復數的形式。所以通過這種方法找出來的元素必定是一個集合,即返回給我們的是個數組(python的叫法是個list)。如果我們的腳本中出現這樣的寫法你是不能直接使用send_keys()和click()的,因為在python程序里你不能對一個list集合做輸入和點擊。比如我們這樣寫:

els= driver.find_elements_by_id('ll')

els[0].send_keys(‘lamecho’)

對找到的els里的第一個元素做輸入,第二個就是els[1],以此類推。注意下標開始是從0開始的。

好了,我們的app自動化測試-搞定界面元素也要結束了。希望大家把文中偏于理論的東西分析理解,自己上手再實現一些demo。下一篇,我們將更多的介紹一下appium中有用的一些方法函數,比如說怎么做界面的滑動,怎么做界面坐標位置的點擊,鎖屏界面的解鎖是如何實現的等等。最后感謝大家耐心讀完本篇文章,我是lamecho,辣么丑。

總結

以上是生活随笔為你收集整理的python+appium判断元素存在_python自动化测试应用--Appium元素篇的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。