Ios 如何处理_APPNAME“想使用您当前的位置”;通过UIAutomation发出警报
好吧,这让我快发疯了。我已经运行了一个小小的CI构建系统。我正在用UIAutomation对我的应用程序进行UI测试。由于应用程序使用CoreLocation,第一次启动应用程序时,我收到一个小警报,要求我确认我希望跟踪我的位置。这将是非常好的,但是警报不是我自己的应用程序的一部分,我不能使用UIAutomation与之交互。是否有任何解决方案可以在不手动点击按钮的情况下确认此警报 谢谢Ios 如何处理_APPNAME“想使用您当前的位置”;通过UIAutomation发出警报,ios,ios-ui-automation,Ios,Ios Ui Automation,好吧,这让我快发疯了。我已经运行了一个小小的CI构建系统。我正在用UIAutomation对我的应用程序进行UI测试。由于应用程序使用CoreLocation,第一次启动应用程序时,我收到一个小警报,要求我确认我希望跟踪我的位置。这将是非常好的,但是警报不是我自己的应用程序的一部分,我不能使用UIAutomation与之交互。是否有任何解决方案可以在不手动点击按钮的情况下确认此警报 谢谢 顺便说一句,为了测试构建而放弃CoreLocation不是一个选项。在我之前工作的地方,我唯一能解决这个问题
顺便说一句,为了测试构建而放弃CoreLocation不是一个选项。在我之前工作的地方,我唯一能解决这个问题的方法就是编写一个小的apple脚本应用程序,可以为您解除警报 您应该能够在iOS模拟器上执行一些简单的UI脚本来消除警报 显然,我假设您在模拟器上运行,而不是在测试设备上运行 如何通过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;
};
这告诉警报点击默认(确认)按钮,并且返回true
告诉警报处理机制我们已经处理了它。如果返回false,则系统会认为需要点击cancel按钮(这是默认行为)
希望有帮助 以上将applescript脚本嵌入cucumber脚本的解决方案
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
Given/^我在GPS权限屏幕上$/do
IO.popen(“osascript”,“w”)do|f|
#applescript到当前位置的OK共享
f、 您的假设是正确的,但是我仍然希望在某个时候能够在真实设备上执行测试。但不管怎样,你能给我一个这个ui脚本的例子吗?让我知道这个苹果脚本是否适合你,我在我的iPhone模拟器上试用了它,它没有问题地解除了警报。不,仍然得到应用程序不是最前面的错误。试图手动绕过这一点会导致仪器内随机崩溃。