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