热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Appium案例之webview、小程序篇

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

 

以上。

 



推荐阅读
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了markdown[软件代理设置]相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 唱唱反调:风口上的技术不要盲目追
      对于前端领域的开发者来说,“学不动了”虽然更多是一种调侃,但也真实地反映出了他们面对频繁出新的前端技术时又爱又恨的心情。在经历了移动互联网的大爆发后,前端领域的边界不 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • 使用chrome编辑器实现网页截图功能的方法
    本文介绍了在chrome浏览器中使用编辑器实现网页截图功能的方法。通过在地址栏中输入特定命令,打开控制台并调用命令面板,用户可以方便地进行网页截图操作。 ... [详细]
  • Linux Shell脚步的格式
    Shell脚步等多个命令的组合,可以做成一个shell文件(1.sh)赋权执行执行命令的方式前两张新的进程中执行,对当前进程不产生影响(cdtmp;pwds ... [详细]
  • 2021年最详细的Android屏幕适配方案汇总
    1Android屏幕适配的度量单位和相关概念建议在阅读本文章之前,可以先阅读快乐李同学写的文章《Android屏幕适配的度量单位和相关概念》,这篇文章 ... [详细]
  • 前言作为一个移动端初学者、爱好者,能使用前端技术开发原生游戏一直是一件渴望而不可及的事情,暂且不说游戏逻辑的复杂度,算法的健壮性ÿ ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了移动web性能测试笔记之一相关的知识,希望对你有一定的参考价值。收集整理@2017/12/16 ... [详细]
author-avatar
ryan__bug
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有