Appium案例之webview、小程序篇

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() 

以上。

原文地址:https://www.cnblogs.com/big-white/p/14456869.html