好的,这让我疯了。我有一个运行的CI构建系统。我正在使用UIAutomation对我的应用程序进行UI测试。由于应用程序使用CoreLocation,因此第一次启动应用程序时,我会收到一些警告,要求我确认是否要跟踪我的位置。这将是伟大的,但所有,但警报不是我自己的应用程序的一部分,我不能使用UIAutomation与它接口。有没有解决方案来确认此警报而无需手动编辑按钮。
感谢。
P.S。摆脱测试构建的CoreLocation不是一种选择。
答案 0 :(得分:2)
我在上一个工作地点解决这个问题的唯一方法是写一个小苹果脚本应用程序,可以为你解除警报。
您应该能够执行一些简单的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
答案 1 :(得分:1)
确实可以与此警报进行交互。在您的应用程序运行时显示的所有警报都可以通过在触发它之前分配onAlert
处理程序来处理。
根据您提出的问题,听起来您在应用启动时会立即启动CLLocationManager
。如果可能的话,尽量延迟半秒钟。然后,在您的UI自动化脚本中,您可以立即在开始时分配警报处理程序。像这样:
UIATarget.onAlert = function(alert) {
alert.defaultButton().tap();
return true;
};
告诉警报点击默认(确认)按钮,return true
告诉警报处理机制我们处理它。如果您返回false,那么系统会认为需要点击取消按钮(这是默认行为)。
希望有所帮助!
答案 2 :(得分:0)
将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
端 端