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

AppiumWinAppDriver自动化测试 Failed to locate opened application window with appid问题

问题产生原因:1.期望能力选项参数丢失

例如:capabilities.setCapability("appWorkingDir", "C:\\Program Files (x86)\\Tencent\\app"))

 某些app需要设置目录属性才可以启动。

问题产生原因:2.访问权限不足

例如:开发工具 或者 WinAppDriver 没有权限访问目标app内存。

需要以管理员命令运行。

问题产生原因:3.App启动延迟

例如:App启动,界面为加载成功,代码逻辑已经运行,此刻查找窗口的方法查找不到窗口id。

加入延迟启动属性:capabilities.setCapability("ms:waitForAppLaunch", "5");等待5秒

问题产生原因:4.App进程保护

例如:目标App结果特殊处理,隐藏了窗口指针,以防止恶意程序读取登录等消息。

早期的盗QQ号程序就是通过检测登录窗口来实现HOOK钩子操作,达到盗号目的。

解决方式需要分析内存以获取窗口指针。

其他解释:

这个错误消息表明,您尝试访问的应用程序没有打开,或者您尝试访问的应用程序没有正确注册 appid。

您需要检查您的代码是否正确打开了应用程序,并且应用程序是否正确注册了 appid。

如果应用程序已经打开,则可能是您尝试访问的应用程序的 appid 与实际注册的 appid 不匹配,因此无法找到该应用程序的窗口。

如果应用程序没有打开,则可能是您的代码没有正确调用应用程序的打开方法,或者可能是应用程序存在某些问题,导致无法正常启动。

请检查您的代码,并根据上述情况进行调试。

排除以上3种简单可能、第四种主动内存查找方式访问app (前提:该app没有刻意做安全加固、仅仅隐藏或动态设置了窗口指针)

传送门拿来主义:java取窗口句柄_如何获取Java中的所有窗口句柄列表(使用JNA)?_涛说精彩历史的博客-CSDN博客

package test.driver;import java.io.UnsupportedEncodingException;import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.platform.win32.WinUser;
import com.sun.jna.platform.win32.WinUser.WNDENUMPROC;
import com.sun.jna.win32.StdCallLibrary;public class WindowsVistByJNA {public interface User32 extends StdCallLibrary {User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class);boolean EnumWindows(WinUser.WNDENUMPROC lpEnumFunc, Pointer arg);int GetWindowTextA(HWND hWnd, byte[] lpString, int nMaxCount);}public static void main(String[] args) {final User32 user32 = User32.INSTANCE;user32.EnumWindows(new WNDENUMPROC() {			int count = 0;@Override	public boolean callback(HWND hWnd, Pointer arg1) {byte[] windowText = new byte[512];user32.GetWindowTextA(hWnd, windowText, 512);String wText = Native.toString(windowText);// get rid of this if block if you want all windows regardless of whether			// or not they have textif (wText.isEmpty() || wText.contains("Default IME") || wText.contains("MSCTFIME UI") || wText.contains("Mode Indicator") || wText.contains("Window") ) {			return true;			}		try {System.out.println("Found window with text " + hWnd + ", total " + (++count)	+ " Text: " + new String(wText.getBytes("utf-8")));} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}	return true;}}, null);}}

 

将 app 属性替换成 appTopLevelWindow 访问方式,从上述JNA方法获取的HWND Windows窗口句柄以HEX 16进制传入:

 //capabilities.setCapability("app", appPath);capabilities.setCapability("appTopLevelWindow", "0x1309f6");

编程自行整合。

参考链接:

https://github.com/Microsoft/WinAppDriver/issues/641

failed to locate opened application window with appid-掘金

java取窗口句柄_如何获取Java中的所有窗口句柄列表(使用JNA)?_涛说精彩历史的博客-CSDN博客

相关文章:

AppiumWinAppDriver自动化测试 Failed to locate opened application window with appid问题

问题产生原因:1.期望能力选项参数丢失 例如:capabilities.setCapability("appWorkingDir", "C:\\Program Files (x86)\\Tencent\\app")) 某些app需要设置目录属性才可以启动。 问题产生原因:2.访问权限不足 例如&…...

渗透测试--6.1.aircrack-ng破解wifi密码

目录 1.Aircrack-ng简介 1.1 airdump-ng 1.2 aireplay-ng 1.3 aircrack-ng 2.Deauth攻击 3.aircrack-ng工具破解无线网络密码 步骤一:虚拟机连接实验需要用到的网卡 步骤二:设置网卡为监听模式 步骤三:使用wlan0mon网卡扫描附近wif…...

C++中的继承、以及赋值兼容转换。

一、继承的概念及定义 继承可以使代码复用,允许在保持原有类特性的基础上进行扩展。 举个例子:就好比我现在要封装老师、学生等这些人的属性和方法,但是这些人都有重复的属性和方法,比如name、age、sex等等,那么我可…...

js浏览器实现简单的实时扫一扫功能

描述:利用vue-qrcode-reader插件实现h5/wap端简单的扫一扫功能 参考文档:https://gruhn.github.io/vue-qrcode-reader/demos/Validate.html官方文档 安装插件 npm i --save vue3-qr-reader 或 yarn add vue3-qr-reader 注意项目运行必须在https下&…...

unity愤怒的小鸟学习制作(二)

终于又开始了啦啦啦,我有一个自己的相机了,真开心,诶嘿 视频链接和素材如下:视频 小鸟的飞出 想要让小鸟在拉开弹弓之后能飞出去,就必须让这个组件失活,如下 所以我们更改脚本内容,加入&#…...

干外包3年,彻底寄了...

先说一下自己的情况,大专生,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了6年的功能测试&…...

软考高项论文范文(三)

论信息系统项目的沟通管理 【摘要】(该摘要共313个字符) 本文讨论了ⅹⅹ省社保系统民政统一软件开发项目的沟通管理。该项目是在国家大社会保险政策指导下于2018年10月份正式启动的。该系统为用户提供了优抚安置、救灾救济等十大主要业务功能。在本文中…...

浅谈谈谈OTA召回2023

近日,国家市场监督管理总局发布特斯拉召回公告,一下子掀起了互联网热议,这次召回的范围是在2019年1月12日至2023年4月24日期间国内销售特斯拉汽车(含国产和进口共计110万辆车),在这个召回公告中有两点值得关…...

【GDI+】旋转文本/斜体字

一、需求 想要绘制如下所示的斜体字,45度 二、分析&思路 Graphics类有个 RotateTransform方法,可以传入任意角度的值来旋转画板。但是这个方法的旋转中心是画板的左上角,所以直接单单用这个方法不能满足我们的需求。此外, G…...

python3 面试题总结

Python global 语句的作用lambda 匿名函数好处Python 错误处理Python 内置错误类型简述 any() 和 all() 方法Python 中什么元素为假?提高 Python 运行效率的方法Python 单例模式为什么 Python 不提供函数重载实例方法/静态方法/类方法__new__和 __init __方法的区别…...

select poll epoll有什么区别

select/poll select 实现多路复用的方式是,将已连接的 Socket 都放到一个文件描述符集合,然后调用 select 函数将文件描述符集合拷贝到内核里,让内核来检查是否有网络事件产生,检查的方式很粗暴,就是通过遍历文件描述…...

Java基础面试题突击系列1

👩🏻 作者:一只IT攻城狮 ,关注我不迷路 ❤️《java面试核心知识》突击系列,持续更新… 💐 面试必知必会学习路线:Java技术栈面试系列SpringCloud项目实战学习路线 📝再小的收获x365天…...

go-zero和dtm分布式事务实现

go-zero是一个基于Go语言的微服务开发框架,而DTM(Distributed Transaction Manager)是一个分布式事务管理器,用于实现跨多个微服务的分布式事务。 下面是使用go-zero和DTM实现分布式事务的基本步骤: 安装和配置DTM&am…...

Springboot +Flowable,会签、或签简单使用(一)

一.简介 **会签:**在一个流程中的某一个 Task 上,这个 Task 需要多个用户审批,当多个用户全部审批通过,或者多个用户中的某几个用户审批通过,就算通过。 例如:之前的请假流程,假设这个请假流程…...

银行面试中的即兴演讲技巧,你了解吗

面试的主要形式有无领导小组讨论、结构化和半结构化面试,一些银行还会出现辩论赛、角色扮演、即兴演讲等形式,今天小编就来聊一聊面试中的即兴演讲,从如信银行考试中心了解到: 简单来说即兴演讲就是在特定情境下,自发或…...

基于LT6911UXC的LVDS视频接口调试经验

文章目录 概要整体架构流程技术名词解释技术细节小结概要 项目方案采用龙讯半导体LT6911系列 整体架构流程 CPU主芯片采用飞腾,显卡采用GP102,由于项目需要LVDS接口,GP102的HDMI口输出后经过LT6911UXC转成LVDS输出 在本方案中有两种显示屏;一个是10.4寸,一个是15.6寸。…...

【C++】OpenMP简介

一、背景知识 1、program作用 #pragma 是 C 和 C 语言中的一个预处理指令。它主要用于向编译器发送特定的信息或者指示,以便控制编译过程。#pragma 通常与编译器特定的选项或功能一起使用,因此它的具体行为和实现可能因不同的编译器而有所不同。 #pra…...

Unity HybridCLR 热更工具学习日记(一)

目录 导入HybridCLR包、安装设置相关选项 导入HybridCLR包 先找到HybridCLR包的git地址:https://github.com/focus-creative-games/hybridclr 复制包的http地址,打开unity - window - package Manager;点击左上角的 选择Add Package for…...

内网渗透(七十五)之域权限维持之DCShadow

DCShadow 2018年1月24日,在BlueHat安全会议上,安全研究员Benjamin Delpy 和 Vincent Le Toux 公布了针对微软活动目录域的一种新型攻击技术------DCShaow。利用该攻击技术,具有域管理员权限或企业管理员权限的恶意攻击者可以创建恶意域控,然后利用域控间正常同步数据的功能…...

JAVA日常练习—习题5

1.机器人类及其子类 设计一个机器人的抽象类,具有质量(double)、名字(String)等属性;具有设置属性值方法和获得并打印属性值的方法,还有一个运动的抽象方法move()。设计电动汽车类和飞行器类&a…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

AspectJ 在 Android 中的完整使用指南

一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...