5

わかりました、これは私を狂わせています。小さなCIビルドシステムを実行しています。そして、UIAutomationを使用してアプリケーションのUIテストを行っています。アプリケーションはCoreLocationを使用しているため、アプリケーションを初めて起動したときに、現在地を追跡するかどうかを確認するように求める小さなアラートが表示されます。これはすばらしいことですが、アラートは私自身のアプリケーションの一部ではなく、UIAutomationを使用してそれとインターフェイスすることはできません。ボタンを手動でタップせずにこのアラートを確認するための解決策はありますか?

ありがとう。

PSテストビルドのためにCoreLocationを取り除くことはオプションではありません。

4

3 に答える 3

2

私が以前働いていた場所でこれを回避する唯一の方法は、アラートを却下できる小さなアップルスクリプトアプリを作成することでした。

iOSシミュレーターでアラートを閉じるために、いくつかの簡単なUIスクリプトを実行できるはずです。

明らかに、テスト用のデバイスではなく、シミュレーターで実行していると想定しています。

iPhoneシミュレーター用のアップルスクリプトを介して位置アラートを閉じる方法

  1. [システム環境設定]で[ユーザー補助]を開きます。左下隅にある[支援機器のアクセスを有効にする]オプションを必ずオンにしてください

アプリがシミュレーターで起動し、アラートが表示された後に実行する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
于 2012-12-19T00:20:26.647 に答える
1

このアラートを操作することは確かに可能です。アプリの実行中に表示されるすべてのアラートは、トリガーする前にonAlertハンドラーを割り当てることで処理できます。

あなたが尋ねた質問に基づくと、CLLocationManagerアプリの起動直後に起動しているようです。可能であれば、0.5秒程度遅らせるようにしてください。次に、UIオートメーションスクリプトで、最初からアラートハンドラーをすぐに割り当てることができます。このようなもの:

UIATarget.onAlert = function(alert) {
    alert.defaultButton().tap();
    return true;
};

これは、アラートにデフォルト(確認)ボタンをタップするようにreturn true指示し、アラート処理メカニズムにそれを処理したことを通知します。falseを返した場合、システムはキャンセルボタンをタップする必要があると見なします(これはデフォルトの動作です)。

お役に立てば幸いです。

于 2012-12-19T03:52:34.467 に答える
0

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

エンドエンド

于 2013-03-08T16:21:12.633 に答える