2011-11-25 13 views
5

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

enter image description here

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

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秒間の遅れを入れて、行動を変えなかった。

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

答えて

5

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

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

+1

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

0

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

+0

方法:値をリフレッシュする

一つの方法は、更新イベントを送信するのですか?私はUITextFieldの代わりにUILabelを使ってみましたが、同じ結果がありました。 –

0

Accessibility Inspectorを接続して、UIAutomationがあなたのアプリに「見えるもの」を見せてください。それはあなたのアプリで値を設定する方法のためにいくつかの古い値を読み込んでいる可能性があります。

UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil); 
関連する問題