私の質問は、XCodeのInstrumentsツールのUIオートメーションテンプレートに関連しています。UIオートメーションはUIActionSheetテストをどのようにサポートしていますか?UIAActionSheet要素があることを知っており、アプリケーションでそれを取得できました。しかし、アクションシートのボタンを使って操作する方法がわかりません。UIオートメーションは、これらのボタンの要素を提供しません。UIオートメーションのドキュメントにも、この問題に関する情報はありません。以下のリンクを参照してください。このコントロールはボタンにUIButtonクラスを使用せず、特定の方法でボタンをレンダリングしているようです。UIAActionSheetからボタンにアクセスする方法を教えてください。ありがとうございました。
4 に答える
ご覧のとおり、各アクション シートの既定のボタンである [キャンセル] ボタンを返すメソッドがあります。アクションシートには他に「デフォルト」のボタンがないため、独自に実装する必要があります。
重要なリンゴの参照に注意することの 1 つは、親から継承された特定のクラスのメソッドをスキップすることです。UIAActionSheet (ほとんどの UIA 要素と同様) は、UIAElement クラスからすべてのメソッドを継承します。このリファレンスを確認してください。呼び出して、アクションシートからすべてのボタンの配列を取得できるはずです
var arrButtons = objActionSheet.buttons();
次に、名前プロパティで必要なものを確認できます (再び UIAElement のメソッドname()
)。
配列内のどの要素に関心があるかを確認すると、 UIAElement メソッドを使用してそのボタンを直接呼び出すことができます (ActionSheet を変更しないと仮定します) elements()
。
たとえば、ActionSheet ツリーの 2 番目のボタンをタップする場合は、次のように呼び出します。
UIATarget.localTarget().frontMostApp().actionSheet().elements()[1].tap();
localTarget() をスキップできるかもしれませんが、確かではありませんが、上記のコードは機能するはずです。
私のように整理したい場合:
function getTarget() {
return UIATarget.localTarget();
}
function getApp() {
return getTarget().frontMostApp();
}
function getWindow() {
return getApp().mainWindow();
}
function tapActionSheetButtonInIndex(index) {
var actionSheet = getApp().actionSheet() || getWindow().popover().actionSheet();
actionSheet.buttons()[index].tap();
}
私のアクションシートはポップオーバーにあったので、これは nil 要素を返します:
UIATarget.localTarget().frontMostApp().actionSheet();
これはアクション シートを返します。
UIATarget.localTarget().frontMostApp().mainWindow().popover().actionSheet();
しかし、それには nil elements() と buttons() があります。
そこで、MikhailV の関数を使用してボタンをタップしました。
var target = UIATarget.localTarget();
var actionSheet = UIATarget.localTarget().frontMostApp().mainWindow().popover().actionSheet();
var buttonIndex = 1;
tapActionSheetButton(target, actionSheet, buttonIndex);