Ios 如何处理_APPNAME“想使用您当前的位置”;通过UIAutomation发出警报

Ios 如何处理_APPNAME“想使用您当前的位置”;通过UIAutomation发出警报,ios,ios-ui-automation,Ios,Ios Ui Automation,好吧,这让我快发疯了。我已经运行了一个小小的CI构建系统。我正在用UIAutomation对我的应用程序进行UI测试。由于应用程序使用CoreLocation,第一次启动应用程序时,我收到一个小警报,要求我确认我希望跟踪我的位置。这将是非常好的,但是警报不是我自己的应用程序的一部分,我不能使用UIAutomation与之交互。是否有任何解决方案可以在不手动点击按钮的情况下确认此警报 谢谢 顺便说一句,为了测试构建而放弃CoreLocation不是一个选项。在我之前工作的地方,我唯一能解决这个问题

好吧,这让我快发疯了。我已经运行了一个小小的CI构建系统。我正在用UIAutomation对我的应用程序进行UI测试。由于应用程序使用CoreLocation,第一次启动应用程序时,我收到一个小警报,要求我确认我希望跟踪我的位置。这将是非常好的,但是警报不是我自己的应用程序的一部分,我不能使用UIAutomation与之交互。是否有任何解决方案可以在不手动点击按钮的情况下确认此警报

谢谢


顺便说一句,为了测试构建而放弃CoreLocation不是一个选项。

在我之前工作的地方,我唯一能解决这个问题的方法就是编写一个小的apple脚本应用程序,可以为您解除警报

您应该能够在iOS模拟器上执行一些简单的UI脚本来消除警报

显然,我假设您在模拟器上运行,而不是在测试设备上运行

如何通过iPhone模拟器的apple脚本解除位置警报

  • 系统首选项中打开可访问性。在左下角,确保选中“启用辅助设备访问”选项
  • 在模拟器中启动应用程序并显示警报后运行的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模拟器上试用了它,它没有问题地解除了警报。不,仍然得到应用程序不是最前面的错误。试图手动绕过这一点会导致仪器内随机崩溃。