java - 如何将 appium 连接到 android 上现有正在运行的应用程序
问题描述
我正在编写一个跨平台自动化,我有一个 selenium 桌面驱动程序,我执行一些操作,在设备上启动我的服务,并在 android 设备上启动警报,我想接受警报,然后一起使用 web 驱动程序和移动驱动程序执行一些功能。
Web 驱动程序工作正常,它在 Web 浏览器上执行所需的操作并在设备端创建警报。
因此,我的应用程序/服务已经在设备上启动,现在当我尝试设置 appium 功能时:
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("platform", "ANDROID");
capabilities.setCapability("version", "4.4");
capabilities.setCapability("automationName", "uiautomator2");
capabilities.setCapability("deviceName", "karnak");
capabilities.setCapability("platformVersion", "7.1");
capabilities.setCapability("noReset", "true");
capabilities.setCapability("autoGrantPermissions", "true");
capabilities.setCapability("appPackage", "xyz");
capabilities.setCapability("appActivity", ".abc");
capabilities.setCapability("optionalIntentArguments", payload);
发生的事情是 appium 将终止我拥有的现有会话,并将安装应用程序并尝试使用提供的有效负载启动活动,该有效负载现在无效。
所以有一种方法可以让我为设备上现有的正在运行的应用程序/服务创建移动驱动程序,而无需安装应用程序并重新启动它。
我发现你必须做 noReset 但这似乎对我不起作用。我尝试提供 appWaitPackage 和 appWaitActivity 而不是 appPackage 和 appActivity ,但这也不起作用。
如果你们中的任何人知道我如何将移动驱动程序附加到现有的正在运行的应用程序/服务,请告诉我。
解决方案
Appium 允许通过https://appium.io/docs/en/writing-running-appium/caps/以多种方式利用您的应用程序
如果您没有指定带有指向 apk 的链接的应用程序标签,它将不会安装任何东西。但是,正如您所指出的,它仍会基于 appPackage / appActivity 启动应用程序的新实例。
要解决这个问题,请使用标志 autoLaunch 自动初始化被测应用程序。如果这是错误的,Appium 不会安装/启动正在测试的应用程序。默认为真。
然后,您可以将其与 dontStopAppOnReset=true 结合使用,以便在测试完成时让您的应用程序继续运行。
推荐阅读
- sql - PL/SQL如何在过程中显示来自select语句的数据?
- sql - 在 sql/oracle 中计算通过和失败计数
- javascript - 尝试仅使用js制作备用行#eee背景
- python - Pygame 球随时间放大
- c# - 未找到 Visual Studio 项目模板 *.projiitems
- r - 在 ggplot 或 sjplot 森林图中创建“斑马”格式
- ios - 在 SwiftUI 列表中移动项目时不需要的动画
- python - Python Dash 应用在回调中添加下载按钮
- c++ - C++调用返回模板类型值的函数
- vue.js - Vue.js:根据环境加载js文件