2

iPhone アプリケーションの自動単体テストをセットアップしようとしています。私は UIWebView を使用しており、さまざまなリンクのクリックをシミュレートする必要があります。JavaScript でこれを試してみましたが、リンクを手動でクリックしたときと同じ結果にはなりません。主な問題は、targetプロパティが設定されているリンクにあります。

標準の「ポップアップ」リンク (例: <a href="http://example.com" target="_blank">) を手動でクリックすると、UIWebView はクリック イベントを無視し、何も移動しません。次に、JavaScript メソッドを介してこのまったく同じリンクを自動的にクリックしようとするとdispatchEvent()、UIWebView はtarget属性を完全に無視し、現在のページで通常どおりリンクを開きます。

手動でリンクをクリックしたときとまったく同じ結果を生成するには、自動単体テストが必要です。

この自動化された単体テストが正しく機能する唯一の方法は、特定の x/y 座標 (つまり、リンクが配置されている場所) でのマウス クリックをシミュレートすることだと思います。単体テストは内部でのみ使用されるため、プライベート API 呼び出しは問題ありません。

iPhone アプリisimulateが似たようなことをしているように見えるので、これは可能であるように思われます。

フレームワークでこれを行う方法はありますか?

Simulate mouse click to window instead of screenというタイトルの同様の質問を見つけましたが、この方法は OS X でのみ有効であり、iPhone OS では有効ではないと推測しています。

4

4 に答える 4

1

touchesBegan/touchesEndedメソッドを直接呼び出すことで、タッチをシミュレートできると思います(クラスUIViewを確認してください)。UIResponder

于 2010-04-24T03:04:33.083 に答える
1

クリックの場所をテストで使用するデータ構造に保存し、ここで説明されているように標準のタッチ イベントをシミュレートしてください。

--- このリンクの例があまりうまくいかないことに気付きました。私が提案できる他の唯一のオプションは、テストから実行するときに html を操作して _target リンクを置き換えることです (手動でクリックすると UIWebView がこれらを適切に処理することを知っているので、単体テストには小さなボッジは問題ないと思いますか?)。

この回答の素晴らしいウォークスルー

于 2010-05-11T14:02:20.840 に答える
1

これを行う適切な方法は、独自に作成し、このイベントをそのメソッドを介してインスタンスUIEventに投稿することです。UIApplication-sendEvent:

ただし、 を構築するためのパブリック API はUIEventないようです。そのため、うまくいかない可能性があります。

于 2010-05-06T17:40:52.987 に答える
0

特定のケースでは、シミュレーターでテストし、MacOS イベント ジェネレーターを使用してクリックするだけで十分な場合があります。

イベントを記録および送信するためのプライベート コールは、GraphicServices / GSEvent.hの一部であり、標準的な使用については自己責任で免責事項を守ってください。すべての UIEvent は実際には __GSEvent への参照を持つ UIInternalEvent であるため、記録のために _gsEvent プロパティを使用して基になるイベントを取得できます。

@property (nonatomic,assign) struct __GSEvent *_gsEvent;

私はこのようなものを使用したことはありませんが、GSSendSystemEvent が開始するのに適しているようです。

于 2010-05-06T17:09:35.627 に答える