如何通过 UIAutomation 处理“_APPNAME_ 想要使用您当前的位置”警报
Posted
技术标签:
【中文标题】如何通过 UIAutomation 处理“_APPNAME_ 想要使用您当前的位置”警报【英文标题】:How to deal with the "_APPNAME_ Would Like to Use Your Current Location" alert through UIAutomation 【发布时间】:2012-12-18 17:43:24 【问题描述】:好吧,这让我发疯了。我有一个小的 CI 构建系统正在运行。我正在使用 UIAutomation 对我的应用程序进行 UI 测试。由于该应用程序使用 CoreLocation,因此第一次启动该应用程序时,我会收到一个小提示,要求我确认是否要跟踪我的位置。这会很好,但是警报不是我自己的应用程序的一部分,我不能使用 UIAutomation 来与它交互。是否有任何解决方案可以在不手动点击按钮的情况下确认此警报。
谢谢。
附:为测试构建摆脱 CoreLocation 不是一种选择。
【问题讨论】:
【参考方案1】:我在以前工作的地方解决这个问题的唯一方法是编写一个小苹果脚本应用程序,它可以为你解除警报。
您应该能够编写一些简单的 UI 脚本来消除 ios 模拟器上的警报。
显然,我假设您在模拟器上运行,而不是在您的测试设备上运行。
如何通过 iPhone 模拟器的苹果脚本关闭位置警报
-
在系统偏好设置中打开辅助功能。确保在左下角选中为辅助设备启用访问权限选项
在您的应用程序在模拟器中启动并显示警报后运行的 Apple 脚本,因此您需要在延迟一段时间后运行此脚本。
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
【讨论】:
您的假设是正确的,但是我仍然希望有能力在某个时候在真实设备上执行我的测试。但无论哪种方式,你能给我一个这个 ui 脚本的例子吗? 让我知道那个苹果脚本是否适合你,我在我的 iPhone 模拟器上试了一下,它没有问题地解除了警报。【参考方案2】:确实可以与此警报进行交互。在您的应用运行时显示的所有警报都可以通过在您触发它之前分配一个onAlert
处理程序来处理。
根据您提出的问题,听起来您在应用启动时立即启动了CLLocationManager
。如果可能,尝试将其延迟半秒左右。然后,在您的 UI 自动化脚本中,您可以立即在一开始就指定一个警报处理程序。像这样的:
UIATarget.onAlert = function(alert)
alert.defaultButton().tap();
return true;
;
这告诉警报点击默认(确认)按钮,return true
告诉警报处理机制我们处理了它。如果你返回 false,那么系统会认为它需要点击取消按钮(这是默认行为)。
希望有帮助!
【讨论】:
不,仍然出现 App not frontmost 错误。尝试手动解决此问题会导致仪器随机崩溃。【参考方案3】:将applescript脚本嵌入黄瓜脚本的上述解决方案
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
结束 结束
【讨论】:
以上是关于如何通过 UIAutomation 处理“_APPNAME_ 想要使用您当前的位置”警报的主要内容,如果未能解决你的问题,请参考以下文章