zoukankan      html  css  js  c++  java
  • 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() 

    以上。

  • 相关阅读:
    vue项目中实现定时刷新页面(重新渲染数据实时更新)
    如何撤销 Git commit ?
    error: You have not concluded your merge (MERGE_HEAD exists)
    ajax的前世今生
    DevTools failed to load SourceMap: Could not load content for webpack:///node_modules/sockjs-client/
    Vue 项目如何配置代理解决跨域
    Nginx 到底是什么东西?
    JSON.parse()与JSON.stringify()的区别
    uni-app 中如何管理用户登录状态
    Oracle分析函数简析
  • 原文地址:https://www.cnblogs.com/big-white/p/14456869.html
Copyright © 2011-2022 走看看