14

UIAutomationを使用してUIAlertViewの存在をテストしようとしていますが、ハンドラーが呼び出されません。

私のJavaScriptの冒頭で私は次のように書いています:

UIATarget.onAlert = function onAlert(alert) {
    UIALogger.logMessage("alertShown");
    return false;
}

私が理解しているように、onAlert関数を指定するとすぐに、テスト中にalertViewが表示されたときに呼び出されるはずです。だから私はalertViewを表示するテストを実行します、これはアラートを表示するコードです:

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:message message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
alertView.accessibilityLabel = @"alerte d'avertissement";
[alertView show];

インストルメントでテストを実行すると、アラートが表示されますが、ハンドラーが呼び出されることはありません。誰かがUIAutomationでイベントハンドラーを使用できましたか?

ありがとう、ヴィンセント。

4

7 に答える 7

19

ドキュメントが間違っているようです。アラートは、スクリプトが実行しようとするのと同じスレッドで処理されることがわかりました。したがって、アラートハンドラーを呼び出す場合は、スリープする必要があります。

UIATarget.onAlert = { ... }
window.buttons().triggerAlertButton.tap();
UIATarget.localTarget().delay(4);

また、アラートの名前と値は常にnullに設定されているようです。ただし、アラートのタイトルを含む最初の静的テキストにはアクセスできました。

于 2010-12-23T18:48:04.127 に答える
6

が表示されたら、UIオートメーションスクリプトがまだ実行されていることを確認してくださいUIAlertView

たとえば、スクリプトの最後に次の行を追加すると、アラートにアクセスできるようになるか、オブジェクト解決の猶予期間が終了するまで、スクリプトが実行され続けます。

// Wait for UIAlert to appear so that UIATarget.onAlert gets called.
target.frontMostApp().alert();

これは、 Instrumentsユーザーガイド:UIテストの自動化をよく読んで理解することで理解しました。これは、UI自動化の概要として実行することを強くお勧めします。

UIATargetクラスリファレンスpopTimeout、特にメソッド、、、、、およびpushTimeoutを確認することも役立つ場合がsetTimeoutありtimeoutますdelay

于 2012-10-04T12:04:38.927 に答える
4

以下のコードは私のために働きます。この関数はアラートを処理しており、「アラート表示」がログに出力されます。

var target = UIATarget.localTarget();
var application = target.frontMostApp();
var window = application.mainWindow();

UIATarget.onAlert = function onAlert(alert){
    UIALogger.logMessage("alert Shown");    
}

target.frontMostApp().mainWindow().tableViews()[0]
    .cells()["Fhgui"].buttons()["Images"].tap();
// Alert detected. Expressions for handling alerts 
// should be moved into the UIATarget.onAlert function definition.
target.frontMostApp().alert().defaultButton().tap();
于 2012-09-11T12:01:07.913 に答える
3

@vdaubryソリューションは単純です。

Appleのドキュメントによると、アラートを手動で処理する場合truefalseonAlert(alert)

 UIATarget.onAlert = function onAlert(alert) {
    UIALogger.logMessage("alertShown");
    return true;
}

@Drew Crawfordは、デフォルトでUIオートメーションによって[缶]ボタンがクリックされるため、遅延は機能しません。ドキュメントは間違っていませんが、明確に説明されていません。

于 2015-03-20T08:48:24.383 に答える
0

私も「アラートハンドラーを呼び出さなかった」という問題を抱えていました。AppleのInstrumentsを再起動するだけで解決しました:-)。

于 2011-03-15T12:04:32.350 に答える
0

例-onAlertは呼び出されません

var target = UIATarget.localTarget(); 
target.buttons()["ShowAlert"].tap()
UIAtarget.onAlert = function onAlert(alert)
{...}

-

例-onAlertは呼び出されます

var target = UIATarget.localTarget(); 
UIAtarget.onAlert = function onAlert(alert)
{......}
target.buttons()["ShowAlert"].tap()

また

#import "onAlert.js"
var target = UIATarget.localTarget(); 
target.buttons()["ShowAlert"].tap()

やってみよう。

于 2013-07-26T05:11:18.960 に答える
0

次のスニペットは、XCode 6.3.1およびInstruments(6.3.1(6D1002))で機能します。

    var target = UIATarget.localTarget();

    // Following line shows an internal alert with 'Cancel' & 'Continue' buttons
    target.frontMostApp().mainWindow().buttons()["ShowAlert"].tap();

    // Handle an internal alert
    UIATarget.onAlert = function onAlert(alert) {
            return true;
     }

    // Perform Tap on alert.
    target.frontMostApp().alert().buttons()["Continue"].tap();
于 2015-05-28T11:03:49.773 に答える