2

Instruments for iOS オートメーションを使用していますが、コピー/貼り付けメニューのオプションをタップする方法がわかりません。logElementTree() を実行すると、UIEditingMenu と 3 つの要素 (コピー/貼り付けなど、そのメニューのオプションに対応) が返されていることがわかります。これを変数に入れようとしていて、その変数を「タップ」しようとしていますが、それを機能させることができません。これが私のコードのサンプルです:

var target = UIATarget.localTarget();

var app = target.frontMostApp();

var window = app.mainWindow();

//This generates the highlighted text

app.dragInsideWithOptions({startOffset:{x:0.45, y:0.6}, endOffset:{x:0.45, y:0.6}, duration:1.5});

var copy = app.editingMenu.elements.withName("copyButton");

copy.tap();

Instruments returns, "0) UIAElementNil".  In addition to the above, I've also tried:

app.elements.withName("copyButton")

window.elements.withName("copyButton")

そのため、editingMenu を取得して利用可能なオプションを生成することはできますが、それらのオプションの 1 つをタップまたは選択する方法がわかりません。そもそもこれらのオプションを参照する方法を知っているかどうかはよくわかりません。

誰にもアイデアはありますか?

ありがとう!

4

3 に答える 3

1

app.editingMenu().elements()[index].tap()ここで、indexは、返された要素の配列からタップするオプションのインデックスであるかどうかを試してください。私は自分のものをこのように機能させました。

于 2012-05-17T20:10:42.497 に答える
0

おい。
まず、いつも使って.elements()いなかったの.elementsですが…でもJSなので、オブジェクトのプロパティに割り当てられている関数を呼び出しているのかもしれません。
とにかく、この編集メニューはアプリの内部ウィンドウではないかもしれませんが、ドラッグを実行すると呼び出されるのはシステムレベルのメニューですか?それが本当なら、試してみてください:

UIATarget.localTarget().frontMostApp().elements().withName("copyButton").tap();

しかし、私がアップルリファレンスで見ているように、呼び出しのあるバージョンはapp.editingMenu()問題ないはずです...
たぶん、位置ごとにボタンを呼び出してみてください。そうすれば、どちらが応答するかがわかります。

UIATarget.localTarget().frontMostApp().editingMenu().elements()[0].tap;
UIATarget.localTarget().frontMostApp().editingMenu().elements()[1].tap;
UIATarget.localTarget().frontMostApp().editingMenu().elements()[2].tap;   

この方法で正しい位置を見つける必要があります。あなたがそれの位置を持っているとき、あなたはそれによってその特性をチェックすることができますbutton.logElement();.withNameこのinfを使用すると、ハードコードされた位置ではなく、メソッドに戻すことができるはずです。

于 2011-03-23T23:46:18.447 に答える
0

これは yoosiba と同様に行いましたが、editingMenu 要素名を使用しました。Xcode 4.5.1 と iOS 6 を実行するデバイスを使用します。

target、app、および vtap() にはAlex Vollmer の優れたtuneup_jsを使用します。それ以外の場合は、UIATarget.localTarget().frontMostApp() および tap() を使用できます。

注: vtap() は遅延し、タップを再試行します。これがないと、独自の遅延を追加する必要がある場合があります。

 // tap in textFieldA to see editingMenu.
 app.mainWindow().textFields()["textFieldA"].vtap();
 app.editingMenu().elements()["Select All"].vtap();
 app.editingMenu().elements()["Copy"].vtap();
 // must delay before attempting next tap
 target.delay(2);

 // ... navigate to different section of the app

 // tap in textFieldB to see editingMenu.
 app.mainWindow().textFields()["textFieldB"].vtap();
 // paste clipboard contents copied from textFieldA into textFieldB
 app.editingMenu().elements()["Paste"].vtap();
 target.delay(2);
于 2012-10-07T21:29:10.347 に答える