轉-Appium—處理混合APP中H5的操做

 

常規方法

正常來講,常規的方法應該是使用UI Automator Viewer來探測頁面的元素,好比下面這樣:html

頁面元素

可是,若是是混合開發,就會出現只有一個webview元素的狀況,正常的方法沒法定位。好比這樣: 
webviewpython

常規的方法是沒辦法定位出這部份內容,只有一個webview,沒法像原生同樣獲取內容。web

取巧的辦法

若是針對H5的元素,只須要點擊的話,能夠這麼作,好比上文咱們的開戶頁面,咱們須要作的只是在這個頁面上點擊當即開戶,跳轉到下一個頁面,咱們能夠用這種取巧的方法:chrome

1.self.driver.get_name('當即開戶').click()

這樣的代碼,也是能夠實現的,固然,上面的get_name我是進行封裝了的,原來的代碼是:瀏覽器

1.def get_name(self, name): 2.element = self.driver.find_element_by_name(name) 3.return element

更優化的處理方式

既然是H5頁面,若是可以獲取HTML代碼就行了,那麼就能夠使用操做DOM的方式來操做這個H5。ruby


谷歌瀏覽器:版本 49.0.2623.87 (64-bit)session


我用的谷歌瀏覽器是這個版本,把手機鏈接上電腦,在谷歌瀏覽器中輸入這個代碼:app

1.chrome://inspect

點擊這個按鈕:函數

inspect

神奇的一幕出現了,全部的代碼都展現在你面前。就像web同樣調試混合APP中的H5.優化

切換webdriver

雖然解決了html代碼的問題,可是另外一個問題出現了,咱們要怎麼去操做DOM。常規的方法是沒辦法了,只能操做原生的,這個時候咱們須要把webdriver切換成H5的,而不是原生的。

其實原理很簡單,只要把webdriver切換到H5的方式就好了。使用以下代碼:

contexts
contexts(self):
  Returns the contexts within the current session.   返回當前會話中的上下文,使用後能夠識別H5頁面的控件
:Usage: driver.contexts 用法 driver.contexts

調用這個方法後,把結果打印出來,你會發現是一個列表,列表中的第一個是NATIVE_APP,這個就表示如今的webdriver是調用原生的功能,咱們使用這個命令切換一下就好了。

def switch_h5(self): self.driver.execute(MobileCommand.SWITCH_TO_CONTEXT, {"name": "WEBVIEW_com.weizq"}) def switch_app(self): self.driver.execute(MobileCommand.SWITCH_TO_CONTEXT, {"name": "NATIVE_APP"})

第一個函數就是封裝切換到H5的方法,name對應的東西就是經過contexts列表中打印出來的東西,固然你也能夠使用其餘的方法封裝。

切換到H5的webdriver以後,再使用driver.find_element_by_id試試?如今就變成查找DOM相關的功能了,再調用第二個函數,又切回原生的webdriver了。

相關文章
相關標籤/搜索