1. 程式人生 > >Appium自動化測試之微信h5元素識別和程式碼實戰

Appium自動化測試之微信h5元素識別和程式碼實戰

引子

總會有人問微信的自動化測試怎麼做。其實我不太明白,為啥你要對ta做自動化測試啊,除非你們公司產品是基於微信做的開發否則沒必要。即使一個公眾號我也覺得沒必要做自動化測試,基本功能點下沒問題就可以了,畢竟都是配置的,除非你後臺配置錯了。(有時候真搞不懂這胡亂的測試,你咋不把整個微信都測一遍啊)

微信的本質

微信其實就是一個混合的app,客戶端裡嵌入的webview,明白這個就好說了。大家一定要注意,app中的native可以用uiaotumator來檢視元素,但webview裡的ta是不行的可以使用chrome來檢視,這個是很多初學者不明白的地方。

如何檢視微信webview中的元素

幾個前提:

1、手機開啟【開發者模式】

2、app必須是debug模式(別問我怎麼弄,自己問開發去)

3、手機通過USB連線電腦,且能夠識別出來手機(不會的自己google去。。。)

4、可以翻牆。。。你懂的

有了這幾個前提之後就可以正式開始了,敲黑板。。。。

1、開啟微信,在任意對話方塊中輸入debugx5.qq.com併發送

blob.png

2、點擊發送成功的debugx5.qq.com,稍等片刻進入設定頁面

3、切換到【資訊】,勾選【是否開啟tbs核心】,如圖

blob.png

4、退出設定

5、進入【發現】>【看一看】

6、開啟chrome,位址列輸入chrome://inspect/#devices,可以看到裝置或者你訪問的資源(看不到的自己google,很多文章介紹)

7、隨便點選【看一看】裡的一篇文章,在chrome中會自動顯示出來,如下圖中的專題就是點選之後出來的

blob.png

8、點選對應的【inspect】就可以看到頁面了,接下來就可以輕鬆識別元素了,和用f12檢視元素沒有區別,如果你還不會請自行面壁去吧

(此處需要翻牆,否則顯示的是白頁)

blob.png

程式碼實戰

上面這些搞定了,在Appium裡寫程式碼就簡單了,先說下關鍵的幾個點:

1、#必須加上此句

desired_caps['chromeOptions']={'androidProcess': 'com.tencent.mm:tools'}

小強提示:

微信的package name=com.tencent.mm,activity=com.tencent.mm.ui.LauncherUI,不要問我怎麼知道的。。。

2、#可以通過下面的語句輸出webview的名稱

contexts=driver.contexts

print('contexts=',contexts)

3、#使用下面的語句切換到指定的webview裡

driver.switch_to.context('WEBVIEW_com.tencent.mm:tools')

4、切換到webview裡面,剩下的定位方式和web一模一樣,就是上面講的元素識別方法

5、#如果想返回原生態的view,可以用下面的語句

driver.switch_to.context("NATIVE_APP")#引數固定

#以開啟微信>點選【發現】>點選【看一看】>獲取文章列表中某個文章的標題為例,其中進入【看一看】之後就是webview了。

12345678910111213141516171819202122232425262728293031323334353637from appium import webdriverimport time#QQ群522720170desired_caps = {}desired_caps = {'platformName''Android','platformVersion''23','deviceName''Android Emulator','unicodeKeyboard''True','resetKeyboard''True','appPackage''com.tencent.mm','appActivity''com.tencent.mm.ui.LauncherUI','chromeOptions': {'androidProcess''com.tencent.mm:tools'}}driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)time.sleep(10)driver.find_element('name','發現').click()time.sleep(10)driver.find_element('name',"看一看").click()time.sleep(10)#獲取當前上下文c=driver.contextsprint(c)#輸出結果['NATIVE_APP', 'WEBVIEW_com.tencent.mm:tools']#切換為 webview,名稱就是從上面的語句得來的driver.switch_to.context('WEBVIEW_com.tencent.mm:tools')#獲取h3標籤的文字並打印出來titles = driver.find_elements('tag name','h3')print(titles[2].text)

至此就全部搞定了,是不是很簡單?