抓脑阔系列之App混合应用上下文环境的切换

什么是混合应用?在手机模拟器或真机中,如果有存在非Android原生控件的内容,比如网页,这种应用即可被称为混合应用。

使用uiautomatorviewer定位APP元素时,只有Android原生控件元素能够被定位到。

如果是非原生的,那么它展示出的就是一个整体,则无法对内部元素进行定位,而webdriver不提供这些非原生的元素定位功能,为了能够使用混合应用,所以要进行上下文切换,假设把模拟器中的浏览器当作一个混合应用,

我们先定位浏览器url输入框,输入http://www.baidu.com,回车,

input_url = driver.find_element_by_id('com.android.browser:id/url')
input_url.send_keys('http://www.baidu.com')
driver.press_keycode(66)

切换到浏览器的webview(context可以使用driver.contexts获取),

driver.switch_to.context('WEBVIEW_com.android.browser')

后续的操作与Web自动化一样的,定位到百度的搜索输入框,录入‘博客园’,并执行搜索,

baidu_input = driver.find_element_by_id('index-kw')
baidu_input.send_keys('博客园')
baidu_input.submit()

 

如果要退出浏览器,返回Android原生应用,怎么操作呢?这里有两种方法:

 driver.switch_to.context(None) 或者 driver.switch_to.context('NATIVE_APP') 

 

注意:

1、由于webview与网页有关,所以会涉及到浏览器(chrome)版本问题,可以在caps里配置【chromedriverExecutableDir】

2、真机的webview调试模式要打开;最好root,否则可能发现不了context。

 

posted @ 2020-03-09 22:01  suanmiao  阅读(237)  评论(0)    收藏  举报