3

私は自分の iOS アプリの自動化テストを作成しており、ビュー コントローラーが完全に読み込まれて画面に表示されたときに JavaScript スクリプトで検出する方法を見つけようとしています...

たとえば、スクリプトはボタンをタップします。

target.frontMostApp().mainWindow().buttons()["loginButton"].tap();

次に、アプリがログインしたら (数秒以下かかる場合があります)、別のボタンを押す必要があります。

今、私は単に遅延を置くだけでそれを機能させました:

target.delay(3);

しかし、ロードされたばかりの新しい画面の要素にアクセスできるように、次のView Controllerがいつロードされるかを検出できるようにしたいと考えています。

助言がありますか?

4

3 に答える 3

2

それを達成するにはいくつかの方法があります:

  1. ライブラリのチューンアップ

    https://github.com/alexvollmer/tuneup_js

    これをチェックすることを本当にお勧めします。より高度なテストを作成するための便利なラッパー関数がいくつかあります。UIAElementクラスを拡張するためにいくつかのメソッドが書かれています。彼らにはwaitUntilVisible()方法があります。

    ただし、要素自体が nil である可能性もあります。視認性の問題ではありませんが、まだ画面に表示されていません。

  2. UIATargetInstance.pushTimeout(delay)UIATargetInstance.popTimeout()

    Appleのドキュメントには次のように書かれています:

    このような場合にある程度の柔軟性を提供し、タイミングをより細かく制御できるようにするために、UI オートメーション はタイムアウト期間を提供します。タイムアウト期間は、失敗する前に指定されたアクションの実行を繰り返し試行する期間です。タイムアウト期間中にアクションが完了すると、そのコード行が戻り、スクリプトを続行できます。タイムアウト期間中にアクションが完了しない場合、例外がスローされます。デフォルトのタイムアウト時間は 5 秒ですが、スクリプトでいつでも変更できます。

    functionを使用することもできUIATarget.delay(delay);ますが、これにより次のステートメントの実行が遅延し、必ずしも要素の検索を待機する必要がなくなります。setTimeout(delay)UIAutomation が要素を見つけることができなかったと判断する前に、タイムアウトをグローバルに設定するためにも使用できます。

    フレームワーク here に対する理解を深めるために説明する Apple のガイドがあります。http://developer.apple.com/library/IOS/#documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/UsingtheAutomationInstrument/UsingtheAutomationInstrument.html

于 2012-10-12T04:59:59.540 に答える
1

ほとんどの場合、次のView Controllerに固有の要素を識別するだけで十分です。ただし、要素の説明は、新しい UI に固有のものでなければなりません。

すなわち target.frontmostApp().mainWindo().navigationBar()["My Next View"];

要素が識別されるか、タイムアウトに達するまで、スクリプトは遅延する必要があります (「 」を参照pushTimeout popTimout)。

場合によっては、要素が可視であることを指定する必要があるかもしれません。

.withValueForKey(1, "isVisible")

逆に使用waitForInvalidすることもできます (以前の UI の何かが消えるのを待ちます)。

于 2012-09-20T14:31:40.007 に答える
0

チューンアップ ライブラリの検索はこちら

同じことについては、関数 waitUntilVisible を参照してください。機能をサポートするために他のファイルを含めることができます。それが役立つことを願っています。

于 2012-09-15T12:17:40.983 に答える