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


 

常規方法

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

頁面元素

但是,如果是混合開發,就會出現只有一個webview元素的情況,正常的方法無法定位。比如這樣: 
webview

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

取巧的辦法

如果針對H5的元素,只需要點擊的話,可以這么做,比如上文我們的開戶頁面,我們需要做的只是在這個頁面上點擊立即開戶,跳轉到下一個頁面,我們可以用這種取巧的方法:

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。


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


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

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了。


免責聲明!

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



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