webview简介:
在Android手机中内置了一款高性能webkit内核浏览器,在SDK中封装为一个叫做WebView组件。如果把一个浏览器比作一辆汽车,我们可以认为webkit内核是他们的发动机,WebView是这辆车的引擎加传动装置。安卓系统中默认自带的webview包名为com.android.webview。
Webview是chrome浏览器的内核,所有安卓手机必须预装,用于显示网页,手机的APP可以调用它显示网页而不需要浏览器,升级以提升系统整体集成应用的网页性能。此应用缺失会导致手机功能故障。
所以当app处于h5或者小程序页面时,普通的定位工具根本就无法定位的到,所以这个时候就需要用到一款工具来辅助定位
inspect:
在谷歌浏览器的地址中输入chrome://inspect/#devices
可以查看的到已链接到的设备,如果查看不到,开启手机调试模式,以及电脑要确保adb环境。
手机谷歌浏览器打开一个页面后,inspect即可出现对应的链接,点击inspect即可打开页面定位工具。
但由于国内被墙等原因,导致打开空白或者显示404,那么只能换另外一款工具了,这里推荐使用ucdevtools
下载链接点击这里,下载安装后即可使用,打开后界面如下
使用方法也是点击inspect即可,如果打开空白,可以在设置里改成使用本地资源,小程序也是同理,下面就可以愉快的定位啦
编写脚本:
因为是要用到Chromedriver,在上面的ucdevtools工具即可看到对应的版本,去点击下载地址下载对应版本的即可
查看webview进程需要用到如下命令
adb shell dumpsys activity top | grep "ACTIVITY" ====mac
adb shell dumpsys activity top | find "ACTIVITY" =====win
查到对应的进程的pid后使用命令 adb shell ps xxx 即可查看当前webview进程,如下图所示
浏览器操作的代码如下:
#作者:windfall #配置我就不贴全了,这里主要是要添加对应的chromedriver地址以及当前webview的进程 desired_caps['chromedriverExecutable']='/Users/chenghaoai/Desktop/appium/chromedriver' desired_caps['noReset']=True desired_caps['chromeOptions']={'androidProcess':'com.android.chrome'} time.sleep(5) con1=driver.contexts #获取当前的webview print('当前的context是:{}'.format(con1)) #打印出来 time.sleep(3) driver.switch_to.context('WEBVIEW_chrome') #选择对应的webview hand=driver.window_handles #获取窗口 print('当前hand是:{}'.format(hand)) driver.switch_to.window('CDwindow-0') #选择对应的窗口 #这里开始就可以使用web定位方式了 driver.find_element_by_xpath('//input[@type="search"]').click() driver.find_element_by_xpath('//input[@type="search"]').send_keys("ceshi") time.sleep(1) driver.find_element_by_xpath('//button[text()="百度一下"]').click() time.sleep(1) driver.find_element_by_xpath('//span[text()="视频"]').click()
小程序的操作代码如下:
#作者:windfall #配置就不贴全了,还是贴重要的 #重点是选择Chrome对应的版本和路径,小程序对应的版本和刚刚浏览器的不一样 #小程序的进程还是刚刚的命令就能查询的到 desired_caps['chromedriverExecutable']='/Users/chenghaoai/Desktop/appium/chromedriver' desired_caps['noReset']=True desired_caps['chromeOptions']={'androidProcess':'com.tencent.mm:appbrand0'} driver.swipe(493,646,497,1437) #页面下滑进入小程序列表 t1=t1=TouchAction(driver) t1.tap(x=176,y=416).perform() #通过坐标点击拼多多 time.sleep(5) con1=driver.contexts #获取webview print('当前页面的context是:{}'.format(con1)) driver.switch_to.context('WEBVIEW_com.tencent.mm:appbrand0') #选择对应的 print("切换成功") time.sleep(5) hand1=driver.window_handles #获取窗口 print('当前页面handles为:{}'.format(hand1)) for x in hand1: #这里因为实际有好几个窗口,所以用循环来遍历 driver.switch_to.window(x) if "拼多多" in driver.page_source: break print("成功") time.sleep(3) driver.find_element_by_xpath('//wx-view[text()="女装"]').click() time.sleep(1) driver.find_element_by_xpath('//wx-view[text()="百亿补贴" and @class="x-93--title"]').click() time.sleep(3) driver.switch_to.context('NATIVE_APP') driver.press_keycode(4) time.sleep(1) driver.press_keycode(4) #driver.find_element_by_xpath('//*[@content-desc="返回"]').click() driver.find_element_by_xpath('//*[@text="微信"]').click()
以上。