当前位置: 首页 > news >正文

appium操控微信小程序的坑

appium操控微信小程序的坑

    • 打不开启动页面
    • driver的context只有NATIVE_APP
    • 小程序上元素找不到

我打算使用appium操控微信小程序,只要能够获取到小程序的页面元素就算成功。下面都是我遇到的问题。

打不开启动页面

以下是我的appium的配置参数和代码:

desired_caps = {'platformName': 'Android','platformVersion': '10','automationName': 'uiautomator2','deviceName': 'E3LBB20402214821','appPackage': 'com.tencent.mm','appActivity': '.ui.LauncherUI','noReset': True,'chromedriverExecutable': 'D://selenium//86.0.4240.22//chromedriver.exe','shouldTerminateApp':True,'showChromedriverLog': True,
}# 指定Appium Server
server = 'http://127.0.0.1:4723'
# 新建一个driver
options = AppiumOptions()
options.load_capabilities(desired_caps)
driver = webdriver.Remote(server, options=options)print("正在打开微信呢...")driver.implicitly_wait(5)driver.find_element(AppiumBy.XPATH, '//*[@text="通讯录"]')
print("打开微信成功...")

启动appium:

appium -g C:\Users\resus\Desktop\a.txt

C:\Users\resus\Desktop\a.txt 是日志的目录。

现象:

微信没有打开,直接就定位通讯录。

日志:

在这里插入图片描述
查找问题:

在这里插入图片描述
他说微信已经启动了,我根本没启动啊。按照他的提示,设置一个参数:

'forceAppLaunch': True

这样就可以打开微信了。

driver的context只有NATIVE_APP

代码:

size = driver.get_window_size()
driver.swipe(size['width'] * 0.5, size['height'] * 0.4, size['width'] * 0.5, size['height'] * 0.9)driver.find_element(AppiumBy.XPATH, '//*[@text="球场预定"]')print("driver context", driver.contexts)
print(driver.current_context)# 打开小程序
driver.find_element(AppiumBy.XPATH,'//*[@content-desc="球场预定,"]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]').click()
print("driver context", driver.contexts)
print(driver.current_context)time.sleep(10)
print("driver context", driver.contexts)
print(driver.current_context)

小程序是运行在谷歌浏览器里面的,是一个进程,这种也叫webview。你要获取里面的元素,得把上下文从微信迁到小程序。

现象:

我打印的结果:

driver context ['NATIVE_APP']
NATIVE_APP
driver context ['NATIVE_APP']
NATIVE_APP
driver context ['NATIVE_APP']
NATIVE_APPProcess finished with exit code 0

这样就没有办法操作小程序。

日志:

在这里插入图片描述

根本就没有一个webview。

我这里的问题是:没有打开debug模式。

解决:

在微信app中打开http://debugxweb.qq.com/?inspector=true,开启debug模式。

如何检验是否开启?

在谷歌浏览器中输入:chrome://inspect/#devices。在微信上打开一个小程序,如果浏览器能够检测到,那就说就说明微信已经开启了debug模式。

在这里插入图片描述

再次运行。

此时就有很多webdriver的context打印出来:

driver context ['NATIVE_APP', 'WEBVIEW_com.tencent.mm:appbrand2', 'WEBVIEW_com.tencent.mm:appbrand0', 'WEBVIEW_com.tencent.mm']

我们切换到小程序的进程,就可以拿到它的页面源码了:

driver.switch_to.context("WEBVIEW_com.tencent.mm:appbrand0")print("page source:", driver.page_source)

小程序上元素找不到

如果page_source打印出来没有问题,但是依旧定位不了元素,可能是以下原因:

  • 等我们进入到小程序的上下文了,元素定位的时候,有件事情要注意,就是要用selenium的XPATH来定位,不要用appium的:
from selenium.webdriver.common.by import Bydriver.find_element(By.XPATH,'xxxxxxxxxx')

把webview想成是PC的页面就行。

  • 隐式等待打开,这个确保找不到元素是其他原因:
driver.implicitly_wait(30)
  • 如果还是找不到元素,那可能是window不对。打印一下窗口有几个,每个窗口都去试一下。
print("window_handles:", driver.window_handles)for window in driver.window_handles:try:driver.switch_to.window(window)print("current window:", driver.current_window_handle)print("current url:", driver.current_url)print(driver.find_element(By.XPATH, '//*[@id="fb-main"]/wx-view/wx-view[1]/wx-view[2]/wx-fb-common/wx-fb-base-button/wx-view/wx-van-button/wx-button/wx-view').text)except Exception as e:print(e)
http://www.lryc.cn/news/209118.html

相关文章:

  • 6 个最佳 Windows 免费磁盘分区管理器
  • 【Leetcode】【每日一题】【简单】2558. 从数量最多的堆取走礼物
  • LeetCode 每日一题 2023/10/23-2023/10/29
  • Android:Installed Build Tools revision 33.0.2 is corrupted.
  • 语法复习之C语言与指针
  • vue笔记(二)
  • 【IT行业就业前景广阔:探讨热门方向与就业机会】
  • linux上java -jar方式运行项目及输出文件nohup.out的清理, linux上定时器的用法
  • macOS 12 Monterey v12.7.1正式版:开启全新的操作系统体验
  • vue制作防止用户未登录或未填写信息就跳转页面的路由拦截器
  • postgis ST_CoverageInvalidEdges用法
  • sqlalchemy的部分函数合集
  • mac苹果电脑使用日常
  • 多线程面试相关知识点
  • 关于生成式人工智能模型应用的调研
  • 【问题】在安装torchvision的时候,会自动安装torch?
  • MySQL数据库备份实战
  • 每日一题 2558. 从数量最多的堆取走礼物(简单,heapq)
  • JavaScript中的Promise
  • 【OpenCV实现图像的几何变换】
  • 2023MathorCup(妈妈杯) 数学建模挑战赛 解题思路
  • leetCode 76. 最小覆盖子串 + 滑动窗口 + 哈希Hash
  • 52.MongoDB复制(副本)集实战及其原理分析
  • 【Unity实战】手戳一个自定义角色换装系统——2d3d通用
  • ruoyi-nbcio版本从RuoYi-Flowable-Plus迁移过程记录
  • 竞赛 深度学习卷积神经网络垃圾分类系统 - 深度学习 神经网络 图像识别 垃圾分类 算法 小程序
  • Linux音频-基本概念
  • Spring Boot 依赖注入实现原理
  • cola架构:cola源码中访问者模式应用浅析
  • Openssl数据安全传输平台015:OCCI的使用方法+在项目中的设计与实现