拡張機能のテストでも同様の問題があります。私はあなたがしなければならないことが、インタラクションを推進するために要素自体ではなく、画面上の要素をタップすることであることを発見しました。私はあなたのシナリオでこれをテストしていませんが、この方法ではまだタップできないものは見つかりませんでした。スーパーフレームとサブビューを取得することにより
let iconFrame = icon.frame // App icon on the springboard
let springboardFrame = springboard.frame // The springboard (homescreen)
icon.pressForDuration(1.3) // tap and hold
// Tap the little "X" button at approximately where it is. The X is not exposed directly
springboard.coordinateWithNormalizedOffset(CGVectorMake((iconFrame.minX + 3)/springboardFrame.maxX, (iconFrame.minY + 3)/springboardFrame.maxY)).tap()
:ここ
は同様に、典型的な相互作用を介して取り出すことができないアプリのアイコンのためのスプリングの「X」ボタンをタップするスイフト例であります要素が画面上でどこにあるべきかを計算することができます。 coordinateWithNormalizedOffset
は、フレームまたはピクセルオフセットではなく、[0,1]の範囲のベクトルを取ります。要素自体を座標でタップしても機能しないので、superview/XCUIApplication()レイヤーでタップする必要があります。
より一般的な例:あなたはスプリング層にアクセスし、アプリケーションの外に行く必要がある場合は
let myElementFrame = myElement.frame
let appFrame = XCUIApplication().frame
let middleOfElementVector = CGVectorMake(iconFrame.midX/appFrame.maxX, iconFrame.midY/appFrame.maxY)
// Tap element from the app-level at the given coordinate
XCUIApplication().coordinateWithNormalizedOffset(middleOfElementVector).tap()
、あなたがそうすることができます。
let springboard = XCUIApplication(privateWithPath: nil, bundleID: "com.apple.springboard")
springboard.resolve()
しかし、あなたは、いくつかを公開する必要がありますObjective-Cを使用したプライベートXCUITestメソッド:
@interface XCUIApplication (Private) {
- (id)initPrivateWithPath:(id)arg1 bundleID:(id)arg2;
}
@interface XCUIElement (Private) {
- (void) resolve;
}