Appium 的 enableMultiWindows 参数

引言

在移动应用自动化测试中,​​混合应用(Hybrid App)​​ 和多窗口场景(如分屏、弹窗、多
WebView)的处理一直是技术难点。Appium 的 enableMultiWindows
参数为这类场景提供了关键支持,但在实际使用中常因配置不当引发问题。

遇到的问题

起初在测试一个期货交易类APP时,订单发送后会有成交回报,在app的上方显示。这个提示弹出框无法被appium获取,获取page souce XML结构时无法找到这个元素。其实这就是因为在Appium初始化driver时,没有把这个参数设置成True,导致,这部分的元素XML结构不可见,所以无法定位,进行成交回报验证和下一步操作。

解决方案

  1. 可以在Appium初始化时设置 把参数"enableMultiWindows": True 设置成True
caps = {"platformName": "Android","deviceName": "emulator-5554","app": "/path/to/app.apk","automationName": "UiAutomator2",  # 必须使用 UiAutomator2"enableMultiWindows": True         # 启用多窗口支持
}
  1. 但是我们使用的时测试平台,没有底层的初始话driver的操作,就不能在初始的时候去操作这个参数,所以就研究怎么在运行时去修改Appium的参数。其实Appium的代码对外暴露的有修改设置的接口driver.setSetting(Setting.WAIT_FOR_IDLE_TIMEOUT,60);,但是这个Setting的类型时一个Enum类型,在它的源码中能看到有以下几种
    IGNORE_UNIMPORTANT_VIEWS("ignoreUnimportantViews"),WAIT_FOR_IDLE_TIMEOUT("waitForIdleTimeout"),WAIT_FOR_SELECTOR_TIMEOUT("waitForSelectorTimeout"),WAIT_SCROLL_ACKNOWLEDGMENT_TIMEOUT("scrollAcknowledgmentTimeout"),WAIT_ACTION_ACKNOWLEDGMENT_TIMEOUT("actionAcknowledgmentTimeout"),KEY_INJECTION_DELAY("keyInjectionDelay"),NATIVE_WEB_TAP("nativeWebTap"),IMAGE_MATCH_THRESHOLD("imageMatchThreshold"),FIX_IMAGE_FIND_SCREENSHOT_DIMENSIONS("fixImageFindScreenshotDims"),FIX_IMAGE_TEMPLATE_SIZE("fixImageTemplateSize"),CHECK_IMAGE_ELEMENT_STALENESS("checkForImageElementStaleness"),UPDATE_IMAGE_ELEMENT_POSITION("autoUpdateImageElementPosition"),NORMALIZE_TAG_NAMES("normalizeTagNames"),IMAGE_ELEMENT_TAP_STRATEGY("imageElementTapStrategy");

其实是没有我们想要的enableMultiWindows这个参数。所以我们接着看setSetting 的底层方法

public interface HasSettings extends ExecutesMethod {default void setSetting(Setting setting, Object value) {CommandExecutionHelper.execute(this, MobileCommand.setSettingsCommand(setting, value));}default Map<String, Object> getSettings() {Map.Entry<String, Map<String, ?>> keyValuePair = MobileCommand.getSettingsCommand();Response response = this.execute((String)keyValuePair.getKey(), (Map)keyValuePair.getValue());return ImmutableMap.builder().putAll((Map)Map.class.cast(response.getValue())).build();}
}

传进来的setting是在这里使用的MobileCommand.setSettingsCommand(setting, value)
所接着看源码,看看能否自己构造一个,看下setSettingsCommand

    public static Map.Entry<String, Map<String, ?>> setSettingsCommand(Setting setting, Object value) {return new AbstractMap.SimpleEntry(SET_SETTINGS, prepareArguments((String)"settings", (Object)prepareArguments(setting.toString(), value)));}

可以看到(Object)prepareArguments(setting.toString(), value)其实就是把enum的setting给转成了string,所以我们完全可以自己传进去一个enableMultiWindows,并且把value也设置成true, 这样手动生成一个AbstractMap.SimpleEntry就行了。
所以修改完成的代码就是

CommandExecutionHelper.execute(driver,new AbstractMap.SimpleEntry<>("setSettings", prepareArguments((String)"settings", (Object)prepareArguments("enableMultiWindows", true))));

在测试代码中执行这一行,就能解决没有得到弹窗XML元素的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/84035.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++中的菱形继承问题

假设有一个问题&#xff0c;类似于鸭子这样的动物有很多种&#xff0c;如企鹅和鱿鱼&#xff0c;它们也可能会有一些共同的特性。例如&#xff0c;我们可以有一个叫做 AquaticBird &#xff08;涉禽&#xff0c;水鸟的一类&#xff09;的类&#xff0c;它又继承自 Animal 和 Sw…

前端excel表格解析为json,并模仿excel显示

前端环境&#xff1a;elementUI vue2 <style lang"scss" scoped> 页面效果 jsondata为mock数据&#xff0c;为方便调试其内容可清空&#xff0c;首行&#xff08;字母坐标&#xff09;随数据内容自动变化&#xff0c;首列也是一样&#xff0c;模拟excel …

NAT(网络地址转换)逻辑图解+实验详解

原理 NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09; 是一种网络技术&#xff0c;用于在IP数据包通过路由器或防火墙时&#xff0c;修改其源IP地址或目标IP地址&#xff0c;以实现不同网络之间的通信。 基础概念 本来NAT是来解决 IPv4 地…

Qt+线段拖曳示例代码

Qt线段拖曳示例代码&#xff0c;功能见下图。 代码如下&#xff1a; canvaswidget.h #ifndef CANVASWIDGET_H #define CANVASWIDGET_H#include <QWidget> #include <QPainter> #include <QMouseEvent> #include <QVector>class CanvasWidget : publi…

高等数学-求导

一、求导数的原函数就是求导数的积分 1&#xff09;设函数f(t)在区间[a,b]上连续&#xff0c;则对任意的x∈[a,b],f(t)在[a,x]上连续&#xff0c;从而在[a,x]上可积。令其积分为Φ(x)∫*a^x f(t)dt, x∈[a,b],则Φ(x)为定义在区间[a,b]上的一个函数&#xff0c;通常称作积分上…

(第94天)OGG 微服务搭建 Oracle 19C CDB 架构同步

前言 Oracle GoldenGate Microservice Architecture (OGGMA) 是在 OGG 12.3 版本推出的全新架构。相比传统架构,OGGMA 基于 Rest API,通过 WEB 界面即可完成 OGG 的配置和监控,大大简化了部署和管理流程。 本文将详细介绍如何在 Oracle 19C CDB 环境中部署 OGG 19.1.0.4 微…

前端vscode学习

1.安装python 打开Python官网&#xff1a;Welcome to Python.org 一定要点PATH&#xff0c;要不然要自己设 点击install now,就自动安装了 键盘winR 输入cmd 点击确定 输入python&#xff0c;回车 显示这样就是安装成功了 2.安装vscode 2.1下载软件 2.2安装中文 2.2.1当安…

uniapp vue 开发微信小程序 分包梳理经验总结

嗨&#xff0c;我是小路。今天主要和大家分享的主题是“uniapp vue 开发微信小程序 分包梳理经验总结”。 在使用 UniAppvue框架开发微信小程序时&#xff0c;当项目比较大的时候&#xff0c;经常需要分包加载。它有助于控制主包的大小&#xff0c;从而提升小程序的启…

git合并多次commit提交

首先查看历史记录 git log 查看你想要合并的commit是哪些&#xff08;注意&#xff1a;这里是逆序&#xff0c;最上的是最新提交&#xff09; 找到当前想要合并的最后一个记录&#xff0c;复制该记录的下一个记录的 id&#xff08;黄色部分commit id&#xff09;&#xff0c…

系统架构设计(七):数据流图

定义 数据流图&#xff08;Data Flow Diagram, DFD&#xff09;是一种用于表示信息系统数据流转及处理过程的图形工具。 它反映系统功能及数据之间的关系&#xff0c;是结构化分析与设计的重要工具。 主要符号 符号说明描述举例方框外部实体&#xff08;源或终点&#xff09…

MAUI与XAML交互:构建跨平台应用的关键技巧

文章目录 引言1. 代码隐藏文件关联1.1 XAML文件与代码隐藏文件的关系1.2 部分类机制1.3 InitializeComponent方法1.4 XAML命名空间映射 2. 元素名称与x:Name属性2.1 x:Name属性的作用2.2 命名规则与最佳实践2.3 x:Name与x:Reference的区别2.4 编译过程中的名称处理 3. 在代码中…

php://filter的trick

php://filter流最常见的用法就是文件包含读取文件&#xff0c;但是它不止可以用来读取文件&#xff0c;还可以和RCE&#xff0c;XXE&#xff0c;反序列化等进行组合利用 filter协议介绍 php://filter是php独有的一种协议&#xff0c;它是一种过滤器&#xff0c;可以作为一个中…

微信小程序开发中,请求数据列表,第一次请求10条,滑动到最低自动再请求10条,后面请求的10条怎么加到第一次请求的10条后面?

在微信小程序中实现分页加载数据列表&#xff0c;可通过以下步骤将后续请求的10条数据追加到首次加载的数据之后&#xff1a; 实现步骤及代码示例 定义页面数据与参数 在页面的 data 中初始化存储列表、页码、加载状态及是否有更多数据的标识&#xff1a; Page({data: {list…

如何利用 Java 爬虫根据 ID 获取某手商品详情:实战指南

在电商领域&#xff0c;获取商品详情数据对于市场分析、选品上架、库存管理和价格策略制定等方面具有重要价值。某手作为国内知名的电商平台&#xff0c;提供了丰富的商品资源。通过 Java 爬虫技术&#xff0c;我们可以高效地根据商品 ID 获取某手商品的详细信息。本文将详细介…

电平匹配电路

1、为什么要电平匹配? 现在很多SOC器件为了降低功耗,都把IO口的电平设计成了1.8V,核电压0.85V,当这种SOC做主平台时,在做接口设计需要格外关注电平的匹配。单板中经常需要将1.8V的电平转换成3.3V或者转成5V。如果没有注意到输入和输出信号之间的电平匹配,系统就无法正常…

【技术揭秘】Profinet转RS485如何优化冲剪机的实时通信性能?​​

在现代工业自动化领域&#xff0c;通信协议是连接不同设备和系统的关键。RS485和Profinet是两种广泛使用的工业通信标准&#xff0c;它们各自拥有独特的特性和应用场景。本文将探讨如何通过一个小疆智控Profinet转RS485网关来优化冲剪机的应用&#xff0c;提高生产线的效率和可…

面经总目录——持续更新中

说明 本面经总结了校招时我面试各个公司的面试题目&#xff0c;每场面试后我都及时进行了总结&#xff0c;同时后期补充扩展了同类型的相近面试题&#xff0c;校招时从两个方向进行投递&#xff0c;视觉算法工程师和软件开发工程师&#xff08;C方向&#xff09;&#xff0c;所…

AI前端页面生成:deepsite、Qwen Web Dev

deepsite网页生成 https://huggingface.co/spaces/enzostvs/deepsite 落地页美观不错,默认用tailwindcss实现样式 提示词: AI 功能是核心,通过后端 server.js 实现。server.js 使用 Express 框架,依赖 @huggingface/inference 库与 Hugging Face 推理 API 交互,具体使用…

华为云鲲鹏型kC2云服务器——鲲鹏920芯片性能测评

华为云鲲鹏型kC2云服务器性能怎么样&#xff1f;性能很不错&#xff0c;鲲鹏通用计算增强型kC2实例是ARM架构的云服务器&#xff0c;CPU采用Huawei Kunpeng 920 2.9GHz主频&#xff0c;每个vCPU对应一个底层物理内核。华为云服务器网hwyfwq.com整理鲲鹏型kC2云服务器性能测评及…

Java 安全SPEL 表达式SSTI 模版注入XXEJDBCMyBatis 注入

https://github.com/bewhale/JavaSec https://github.com/j3ers3/Hello-Java-Sec https://mp.weixin.qq.com/s/ZO4tpz9ys6kCIryNhA5nYw #Java 安全 -SQL 注入 -JDBC&MyBatis -JDBC 1 、采用 Statement 方法拼接 SQL 语句 2 、 PrepareStatement 会对 SQL 语…