草庐IT

微信小程序自动化实战(appium+python)

小测. 2024-02-07 原文

本文主要讲解一下使用appium操作微信小程序的流程
要使用appium进行自动化第一步当然是配置好appium环境,这块我就不在这里细讲了,直接开始吧;
ps:新版微信不再需要手动开启X5内核了

1、配置desired_capabilities

  • 注意点:
    1. 要操作微信小程序,则需要先进入到微信小程序
    2. 要先查看微信webview使用谷歌驱动版本然后进行配置
      谷歌驱动版本可以利用edge浏览器的工具(edge://inspect/#devices)进行查看
      只要使用adb工具连上手机后,打开对应的小程序页面就能在浏览器中查看到如下信息

      具体配置如下,可根据个人需要进行修改
    capability:
        # 设备操作系统
        "platformName": "Android"
        # 设备名称(随意填写)
        "deviceName": "HuaWeiP30"
        # 应用程序的包名  
        "appPackage": "com.tencent.mm"
        # 应用程序的启动页面
        "appActivity": ".ui.LauncherUI"
        # 不重置app
        "noReset": "true"
        # 设置谷歌驱动地址
        "chromedriverExecutable": "G:\\chromedriver\\chromedriver_86\\chromedriver.exe"
    

2、启动微信并进入小程序页面

前提: appium服务已启动、手机或模拟器已连接上(adb devices 中能查看到)

from appium import webdriver
	def init_app(self):
		"""初始化appium驱动"""
		# capability是第一步定义好的
	   caps = cap_conf['capability']
	   driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", self.caps)
	   driver.implicitly_wait(10)
    def into_mini_main_page(self):
       """
       进入小程序首页
       """
       # 进入小程序的方式很多,可以根据自己的需要进行操作  find_and_click是我自己封装的方法
       self.find_and_click(MobileBy.XPATH, "//*[@text='发现']") \
           .find_and_click(MobileBy.XPATH, "//*[@text='小程序']") \
           .find_and_click(MobileBy.XPATH, "//*[@text='京东购物']")

操作到以上步骤后再查看edge浏览器inspect工具应该就能看到如下图的页面

说明微信已经切到小程序页面了,我们程序也要切到对应webview页面:

# 切到对应的context    driver.contexts可以拿到所有context
  self.driver.switch_to.context('WEBVIEW_com.tencent.mm:appbrand0')
  # 在上面页面可以看到有多个页面 我们还需要切到对应的页面中
  for window in self.driver.window_handles:
       self.driver.switch_to.window(window)
       if  ':VISIBLE' in self.driver.title:
           break

执行完以上步骤就已经进入到了微信小程序页面了

3、进行小程序页面定位

在inspect工具中点击对应页面的inspect的按钮,就可以进入到对应的页面进行定位

	ele = driver.find_element(By.XPATH, "//*[text()='京东超市']")
	ele.click()
    # 这里要注意一定要且换到当前展示的页面!!
    for window in self.driver.window_handles:
         self.driver.switch_to.window(window)
         if  'https://h5.m.jd.com' in self.driver.title:
             break
    # 切换进来后就可以对京东超市页面进行定位 

以上就是小程序的一些关键步骤,剩下的就和正常的UI自动化类似了,这里就不再介绍了;接下来大家就可以根据PO思想封装一套框架,最好是web、app、小程序能共用。

有关微信小程序自动化实战(appium+python)的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  3. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  4. Python 相当于 Perl/Ruby ||= - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

  5. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  6. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  7. python - 如何读取 MIDI 文件、更改其乐器并将其写回? - 2

    我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的

  8. ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载 - 2

    我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty

  9. 「Python|Selenium|场景案例」如何定位iframe中的元素? - 2

    本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决

  10. 微信小程序通过字典表匹配对应数据 - 2

    前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立

随机推荐