如何将Appium连接到已在安卓设备上运行的应用程序

5

我正在编写一个跨平台自动化程序,使用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,但这也没有起作用。如果你们中的任何人知道如何将移动驱动程序附加到现有的运行中的应用程序/服务,请告诉我。

你尝试过使用session-override标志吗?capabilities.setCapability("–session-override",true); - Rajesh Chaudhary
我收到了这条消息,它无法识别能力:以下能力已提供,但被Appium无法识别:版本、平台、-session-override。我已按照上述建议添加了以下代码: capabilities.setCapability("–session-override", "true"); - Anup Hariyani
连版本和平台都无法识别吗?你能展示一下完整的代码吗? - Rajesh Chaudhary
1个回答

2

根据 https://appium.io/docs/en/writing-running-appium/caps/,Appium提供了几种使用应用程序的方法。

如果您没有指定带有到apk的链接的应用程序标签,则不会安装任何内容。但是,它仍将基于appPackage / appActivity启动应用程序的新实例。

为解决这个问题,请使用autoLaunch标志初始化要测试的应用程序,以便自动启动。如果此项为false,则Appium不会安装/启动要测试的应用程序。默认值为true。

然后,您可以将其与dontStopAppOnReset=true结合使用,在测试完成后保留应用程序运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接