5

UIAutomation を使用してアプリケーションの自動テストを実行する方法を理解しようとしているので、JavaScript インターフェイスから駆動できる温度変換アプリを作成しました。UI は次のとおりです。

ここに画像の説明を入力

上部のテキスト フィールドには「摂氏」のアクセシビリティ ラベルがあり、同様に下部のフィールドにはアクセシビリティ ラベルとして「華氏」があります。私はこのスクリプトを介してそれを駆動しようとしています:

UIALogger.logStart("Test -40ºC == -40ºF");
var window = UIATarget.localTarget().frontMostApp().mainWindow();
var celsiusField = window.textFields()["Celsius"];
var fahrenheitField = window.textFields()["Fahrenheit"];
var convertButton = window.buttons()["Convert"];

celsiusField.setValue("-40");
convertButton.tap();
var fahrenheitValue = fahrenheitField.value();
if (fahrenheitValue == "-40.0") {
    UIALogger.logPass("-40C == -40F");
} else {
    UIALogger.logFail("-40C == " + fahrenheitValue + "F");
}

これにより、摂氏フィールドのテキストが「-40」に正しく設定され、ボタンがタップされると、アプリは華氏フィールドのテキストを「-40.0」に更新します。ただし、fahrenheitValue値は「華氏」 (テキスト フィールドの名前/ラベル) であるため、テストは失敗します。これはタイミングの問題ではないかと思い、タップ後に 1 秒の遅延を入れましたが、動作は変わりませんでした。

テキスト フィールドからテキストを取得し、期待値と比較することはできますか?

4

3 に答える 3

5

「華氏」になっているのは、それがアクセシビリティ ラベルであるためですか、それともプレースホルダー テキストであるためですか?

value() がプレースホルダー テキストを返す可能性があるようです。回避策の 1 つは、ユーザーが入力を開始したときにプレースホルダーの値を変更して、ユーザーが入力したテキストになるように設定し、削除するときに華氏に戻すことでしょうか? setValue を呼び出しても、UITextField デリゲート メソッドが呼び出されたときと同じように機能すると思いますか?

于 2011-11-25T11:17:10.800 に答える
0

Accessibility Inspectorを接続して、アプリで UIAutomation が「認識する」ものを表示してみてください。アプリで値を設定する方法が原因で、古い値を読み取っている可能性があります。

値を更新する 1 つの方法は、更新イベントを送信することです。

UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil);
于 2011-11-25T11:30:01.493 に答える
0

ビューにラベルを追加し、更新して読み上げることができます。

于 2011-11-25T11:07:30.257 に答える