appium操控微信小程序的坑

这篇具有很好参考价值的文章主要介绍了appium操控微信小程序的坑。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我打算使用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 是日志的目录。

现象:

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

日志:

appium操控微信小程序的坑,爬虫,appium,微信小程序,webview,爬虫,自动化,python,踩坑
查找问题:

appium操控微信小程序的坑,爬虫,appium,微信小程序,webview,爬虫,自动化,python,踩坑
他说微信已经启动了,我根本没启动啊。按照他的提示,设置一个参数:

'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_APP

Process finished with exit code 0

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

日志:

appium操控微信小程序的坑,爬虫,appium,微信小程序,webview,爬虫,自动化,python,踩坑

根本就没有一个webview。

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

解决:

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

如何检验是否开启?

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

appium操控微信小程序的坑,爬虫,appium,微信小程序,webview,爬虫,自动化,python,踩坑

再次运行。

此时就有很多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 By

driver.find_element(By.XPATH,'xxxxxxxxxx')

把webview想成是PC的页面就行。文章来源地址https://www.toymoban.com/news/detail-735226.html

  • 隐式等待打开,这个确保找不到元素是其他原因:
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)

到了这里,关于appium操控微信小程序的坑的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【APP自动化测试必知必会】Appium之微信小程序自动化测试

    H5 是指第 5 代 HTML ,也指用 H5 语言制作的一切数字产品。 所谓 HTML 是“超文本标记语言”的英文缩写。我们上网所看到网页,多数都是由 HTML 写成的。 “超文本”是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。而“标记”指的是 这些超文本必须由包含属性

    2024年02月09日
    浏览(85)
  • Appium自动化(15) - 针对 webview 进行自动化测试

     🔥 交流讨论: 欢迎加入我们一起学习! 🔥 资源分享 : 耗时200+小时精选的「软件测试」资料包 🔥  教程推荐: 火遍全网的《软件测试》教程   📢 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! WebView是android中一个非常重要的控件 它的作用是用来展示一个web页面

    2024年04月10日
    浏览(42)
  • Appium基础 — 操作微信小程序

    微信小程序和微信公众号的测试方式基本上是一样的。 微信的小程序越来越多了,随之带来的问题是:小程序如何做自动化测试? 我们就以微信小程序来进行讲解,介绍如何测试微信小程序。 1、测试微信小程序前提 获取真机设备标识。 也就是设备和电脑进行连接。 换句话

    2024年02月15日
    浏览(26)
  • 微信小程序webview(H5页面)调用微信小程序支付

    1.业务描述:微信小程序商城入口进入的页面是商城H5页面,在H5页面进行微信支付如何实现; 2.微信小程序(webview访问H5页面)必须使用微信小程序支付; 如何实现以及实现方式以及支付后页面返回功能: 商品详情(h5页面)--商品确认页(h5页面)--收银台(h5页面)(点击调

    2024年02月11日
    浏览(33)
  • 微信小程序-webview分享

    项目背景 最近有个讨论区项目需要补充分享功能,希望可以支持在微信小程序进行分享,讨论区是基于react的h5项目,在小程序中是使用web-view进行承载的 可行性 目标是在打开web-view的页面进行分享,那就需要涉及h5和小程序的通讯问题,查看官方文档: 网页向小程序 postMe

    2024年04月15日
    浏览(22)
  • uniapp 微信小程序webview 踩坑

    微信小程序的存在许多功能上的限制和约束,有些情况不得不去使用webview进行开发实现需求,比如 原生无法满足(例如某团队维护SDK 只提供了WEB端jsSDK,且不维护小程序SDK) H5可以同时适用多端(适用范围更广) H5可以弥补小程序部分欠缺 微信生态有部分限制(包大小,设

    2024年02月10日
    浏览(33)
  • 微信小程序webview 顶部title设置

    webview取的是vue页面的title标签中的内容 在配置router时设置name值,每当页面跳转,路由发生改变时,动态修改页面的title。可通过路由前置守卫来实现: 在webview页面的onLoad里设置标题:

    2024年02月12日
    浏览(31)
  • 微信小程序通过Webview打开外部网站

    微信小程序是支持访问第三方网站,但前提是第三方网站得允许访问,因此要在第三方网站的根目录下添加“业务域名” 登陆小程序后台,找到开发设置,添加要访问的第三方网站 先配置校验文件到第三方网站根目录下  再添加验证。 这个时候,就可以在小程序内通过web

    2024年02月11日
    浏览(32)
  • 微信小程序 webview页面分享弹窗

    公司业务需要在webview中添加分享弹窗,可以发送给朋友及生成海报分享,因为好几个详情都需要这个功能,因此抽离了share-sheet的组件,ui效果如下图: 点击分享,显示以下弹窗 share-sheet.wxml如下: share-sheet.js如下: share-sheet.less如下: 一下均为真机测试,实际情况可能会随

    2024年02月11日
    浏览(41)
  • 使用Appium 测试微信小程序和微信公众号方法

    由于腾讯系QQ、微信等都是基于腾讯自研X5内核,不是google原生webview,需要打开TBS内核Inspector调试功能才能用Chrome浏览器查看页面元素,并实现Appium自动化测试微信小程序和微信公众号。 前提条件Appium环境搭建,这里不多说了,可查阅Appium环境搭建文章。 因夜神等模拟器是

    2024年02月13日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包