当前位置: 首页 > 知识库问答 >
问题:

是否可以将应用程序置于后台并在Appium iOS中重新启动

东方镜
2023-03-14

在使用Appium的iOS自动化中,有没有办法执行以下过程?

  1. 按Home键。
  2. 将应用放在后台。
  3. 打开其他应用程序(比如Gmail)-

我试过这些:

RemoteWebDriver wd = null;
wd.close();

但它只是退出我正在自动运行的应用程序(就像wd.quit()),然后当我尝试重新启动时-

共有3个答案

贝浩歌
2023-03-14

退出你正在测试的应用程序真的没那么容易。

我正在使用Appium(应用程序的硒)测试iOS应用程序。我想做的是按下home按钮,不幸的是Appium没有这样的功能(以及一大堆其他测试工具)。

所以我要做的是模拟击键CMD SHIFT H,这是模拟器的等效于home按钮。对于大多数测试工具来说,这也是不可能的,因为它们通过UIAutomation在模拟器的“内部”进行交互。

最后,我制定了以下解决方案(Java):

Runtime runtime = Runtime.getRuntime();
String[] args = { "osascript", "-e", "tell application \"System Events\" \n tell application \"Simulator\" to activate \n tell application \"System Events\" to keystroke \"h\" using {command down, shift down} \n end tell" };
runtime.exec(args);

总之,这非常简单:执行Applescript,然后将击键发送到模拟器。

为了提供一些可读性,这里再次提供了简单的Applescript:

tell application "System Events"
  tell application "Simulator" to activate
  tell application "System Events" to keystroke "h" using {command down, shift down}
end tell

注意:确保在代码中使用“(with\”)。还要确保在每行之后插入\n,因为Applescript基于行。

想出这个解决方案花了我很多时间。我还没有找到任何其他有效的解决方案,可以在不破坏整个测试的情况下,在iOS内部进行测试。

编辑:你可以重新启动应用程序,这就是诀窍!

阎雪峰
2023-03-14

对于iOS

Xcode不支持发送密钥:https://github.com/appium/appium/issues/4479因此,一个可能的解决方案是:https://stackoverflow.com/a/24408831/2302437

为Android

要将应用程序置于后台,即按Home(主页)按钮-

((AppiumDriver) driver).sendKeyEvent(AndroidKeyCode.HOME);

为了重新启动应用程序,我做了以下操作-1.首先使用Monitor.bat识别菜单按钮,即我在索引5处将其命名为“android.widget.TextView”。

2.单击它,即driver.findElementsByClassName(“android.widget.TextView”).get(5).单击()

3.在菜单中找到您的应用程序并单击它。即

driver.findElementsByName(AppName).get(0).click();

夏志国
2023-03-14

Appium实际上提供了客户端库,允许您关闭应用程序、重新启动应用程序(无需从头开始)、锁定sim卡等。

C#、Python、Ruby和Java中都有实现这一点的库。

迁移到这些WebDriver而不是selenium的WebDriver非常简单,建议您使用Appium团队添加的所有功能(如晃动设备、复杂敲击、锁定设备等)

 类似资料:
  • 问题内容: 如果我在Thread对象上使用start()并且run()方法返回,是否可以再次调用start()? 例如, 我只是想知道是因为我的代码抛出了IllegalThreadStateExceptions,所以想知道是否是因为您不能执行上述操作。 问题答案: 不,你不能。该方法的Javadoc 告诉您!

  • 问题内容: 运行XCT UI测试时,可以使用以下命令将应用程序置于后台进行测试: 是否可以通过某种方式使应用程序回到前台(活动状态)而无需重新启动应用程序? 问题答案: Xcode 9更新 :从 Xcode 9 开始,您现在可以简单地调用任何XCUIApplication。 https://developer.apple.com/documentation/xctest/xcuiapplicati

  • 我正在使用Xamarin.forms将我的iOS和Android应用程序整合到一个代码库中。我正在使用Firebase来处理生产中应用程序的远程通知。我希望在我的新Xamarin项目中使用来自我的生产应用程序的相同的google-service.json和googleService-info.plist文件。这可能吗?或者我需要在Firebase中创建和注册一个全新的应用程序? 我已经尝试将现有的

  • 我们正在开发一个使用低级别处理器API的Kafka流应用程序。 根据Kafka的文档,所有线程和并行性都由流线程和流任务处理。使用主题上的分区,并行性也是可伸缩的。 我尝试了最基本的代码,但不能确定它是否介入了Kafka提供的自动功能。例如自动提交偏移量、超时等。 还是坚持Kafka streams已经提供的默认行为并利用stream线程快速处理数据总是更好?

  • 问题内容: 我正在尝试构建一个android应用程序,此应用程序的主要功能之一是使其能够在手机启动时自动启动活动,我在手机上看到一些应用程序已经执行了此操作,因此任何帮助都将非常有用。我可以至少通过sdk对此进行更好的研究,谢谢! 问题答案: 您需要像这样实现BroadCastreceiver: 在清单中添加以下内容: 添加权限:

  • 我想保持一个服务在后台运行,即使当我的应用程序被杀死。我使用的是事件,但服务只在屏幕解锁时运行。我尝试了,但下载应用程序后至少需要重新启动手机一次。 理想情况下,我将使用启动服务所有X分钟。然后检查条件(电池电量、网络连接……)在开始服务之前。 问题是这样的事件不能从声明和监听,而是在活动中,这意味着应用程序是“活动的”。 有办法做我想做的事吗?