'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_APP
Process 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 By
driver.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)
				
Kubeapps作为一款强大的**Kubernetes应用管理平台**,已经在众多企业中证明了其价值。这个基于Web的UI工具让团队能够轻松部署和管理Kubernetes集群中的应用,大幅提升了应用交付效率。本文将分享10个来自实际企业的Kubeapps部署经验,帮助企业用户更好地理解和应用这一优秀工具。 ## 🚀 企业部署Kubeapps的核心优势 Kubeapps为企业级Kubernet
关于定位工具,Appium Inspector,uiautomatorviewer,weditor 都定位不到X5内核的程序。X5内核调试工具腾讯也不支持了。使用Chrome://inspect需要翻墙,UC的工具我下载发现也是404。后来我想既然我appium可以操作控制 小程序,那就把源码直接打印出来。 进入小程序再切换到要使用到的window
H5 是指第 5 代 HTML ,也指用 H5 语言制作的一切数字产品。 所谓 HTML 是“超文本标记语言”的英文缩写。我们上网所看到网页,多数都是由 HTML 写成的。 “超文本”是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。而“标记”指的是 这些超文本必须由包含属性的开头与结尾标志来标记。浏览器通过解码 HTML ,就可以把网页内 容显示出来,它也构成了互联网兴起的基础。...
文章目录1、测试微信小程序前提2、获取微信小程序的进程3、代码示例4、补充:(了解) 微信小程序和微信公众号的测试方式基本上是一样的。 微信的小程序越来越多了,随之带来的问题是:小程序如何做自动化测试? 我们就以微信小程序来进行讲解,介绍如何测试微信小程序。 1、测试微信小程序前提 获取真机设备标识。 也就是设备和电脑进行连接。 输入adb connect 127.0.0.1:21503 链接逍遥模拟器 输入adb devices 能够获取设备名称。 真机安装微信程序。 #### 工具介绍 为了有效地进行微信小程序自动化测试,存在多种工具和技术可供选择。其中一种流行的选择是 `minium` 框架,专门为小程序设计的自动化测试框架,支持 Python 和 JavaScript 编程语言[^3]。 另一种方式涉及 Appium 结合 WebView 技术和 ADB Proxy 实现更底层的操作控制[^1]。这种方式允许开发者通过切换应用上下文来访问并操控小程序内的 Web 组件,从而执行一系列交互动作。 #### 方法概述 当采用 `minium` 进行测试时,不仅可以完成基本的 UI 自动化任务,还可以利用其扩展特性模拟函数调用、直接导航至特定页面并设定初始状态等高级功能。这使得编写复杂场景下的测试案例变得更加容易。 而如果选择了基于 Appium 的方案,则需注意应用程序启动后获取当前可用的 context 列表,并从中选取合适的 WebView 上下文以便进一步操作[^4]: ```python contexts = self.driver.contexts print(contexts) # Switch to the desired webview context here. 此外,在某些情况下可能还需要处理由系统提供的原生控件;此时可以通过集成额外的技术栈如 UiAutomator 或 WebDriverAgent (WDA) 来增强测试覆盖范围。 #### 示例代码片段 下面给出一段简单的例子展示如何使用 `minium` 初始化驱动器并与目标小程序互动: ```python from minium import MiniProgramDriver driver = MiniProgramDriver() driver.start_miniprogram("testappid") # 启动指定ID的小程序实例 finally: driver.stop_miniprogram() # 关闭该实例