UIAutomationでテキストフィールドの値を取得する

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

enter image description here

上部テキストフィールドにはアクセシビリティラベル「Celsius」があり、同様にボトムフィールドにはアクセシビリティラベルとして「Fahrenheit」があります。私はこのスクリプトを通してそれを推進しようとしている:

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 の値は "Fahrenheit"(テキストフィールドの名前/ラベル)なので、テストは失敗します。私はこれがタイミングの問題かもしれないのかどうか疑問に思ったので、タップの後に1秒間の遅れを入れて、行動を変えなかった。

テキストフィールドからテキストを取り出し、それを期待値と比較することは可能ですか?

5

3 答え

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

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

5
追加された
それは答えのようです。プレースホルダーのテキストを削除しました。私はおそらくその上にバグをファイルする必要があります:)
追加された 著者 user23743,

アクセシビリティインスペクタを接続してみてください。 UIAutomationがあなたのアプリに "見える"ものを表示します。それはあなたのアプリで値を設定する方法のためにいくつかの古い値を読み込んでいる可能性があります。

値をリフレッシュする1つの方法は、更新イベントを送信することです。

UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil);
0
追加された

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

0
追加された
どうやって?私はUITextFieldの代わりにUILabelを使ってみましたが、同じ結果がありました。
追加された 著者 user23743,