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

相关文章
相关标签/搜索