作者:ryan__bug | 来源:互联网 | 2023-09-09 14:27
webview简介:在Android手机中内置了一款高性能webkit内核浏览器,在SDK中封装为一个叫做WebView组件。如果把一个浏览器比作一辆汽车,我们可以认为webkit
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()
以上。