如何通过UIAutomation处理“_APPNAME_想使用您的当前位置”警报

好吧,这让我疯狂。 我有一个小的CI构build系统运行。 我正在使用UIAutomation进行应用程序的UItesting。 由于应用程序使用CoreLocation,应用程序第一次启动时,我得到一些警告,要求我确认我想要跟踪我的位置。 这将是伟大的,所有,但警报不是我自己的应用程序的一部分,我不能使用UIAutomation接口。 有没有任何解决scheme来确认这个警报没有手动录入button。

谢谢。

PS摆脱testing版本的CoreLocation不是一个选项。

我在之前工作的地方解决这个问题的唯一方法就是编写一个小苹果脚本应用程序,可以closures你的警报。

你应该能够做一些简单的UI脚本来消除iOS模拟器上的警报。

显然,我假设你在模拟器上运行,而不是你的testing设备。

如何通过iPhone模拟器的苹果脚本closures位置警报

  1. 系统偏好设置中打开辅助function 。 在左下angular,请确保您选中启用访问辅助设备选项

苹果脚本运行后,你的应用程序已经在模拟器中启动,并显示警报,所以你将需要运行一些延迟后。

tell application "iPhone Simulator" activate end tell tell application "System Events" tell process "iPhone Simulator" click button "OK" of window 1 end tell end tell 

确实有可能与此警报进行交互。 在您的应用程序运行时显示的所有警报都可以通过触发之前分配onAlert处理程序来处理。

根据你提出的问题,这听起来像你启动应用程序启动时立即启动CLLocationManager 。 如果可能的话,尽量延迟半秒左右。 然后,在您的UI Automation脚本中,您可以立即在开始时立即分配警报处理程序。 像这样的东西:

 UIATarget.onAlert = function(alert) { alert.defaultButton().tap(); return true; }; 

这告诉警报点击默认(确认)button, return true告诉我们处理它的警报处理机制。 如果您返回false,那么系统会认为需要点击取消button(这是默认行为)。

希望有所帮助!

以上解决scheme将applescript脚本embedded到黄瓜脚本中

 Given /^I am on the GPS permission screen$/ do IO.popen("osascript", "w") do |f| # applescript to OK sharing of Current Location f.puts <<-eos tell application "iPhone Simulator" activate end tell tell application "System Events" tell process "iPhone Simulator" repeat try click button "OK" of window 1 exit repeat end try end repeat end tell end tell eos 

末端