[解決済み] Xcode UIテスト - UIテストの失敗 - 検索フィールドの「キャンセル」ボタンをタップすると、可視状態(AXアクションによる)にスクロールできない。
2023-04-05 22:32:35
質問
検索バーの「キャンセル」ボタンをタップして、検索フィールドを閉じようとしています。
テストケースはキャンセルボタンを見つけるのに失敗しています。Xcode 7.0.1では正常に動作していました。
ボタンが表示されるのを待つ述語を追加しました。キャンセルボタンをタップすると、テストケースは失敗します。
let button = app.buttons[“Cancel”]
let existsPredicate = NSPredicate(format: "exists == 1")
expectationForPredicate(existsPredicate, evaluatedWithObject: button, handler: nil)
waitForExpectationsWithTimeout(5, handler: nil)
button.tap() // Failing here
ログ :
t = 7.21s Tap SearchField
t = 7.21s Wait for app to idle
t = 7.29s Find the SearchField
t = 7.29s Snapshot accessibility hierarchy for com.test.mail
t = 7.49s Find: Descendants matching type SearchField
t = 7.49s Find: Element at index 0
t = 7.49s Wait for app to idle
t = 7.55s Synthesize event
t = 7.84s Wait for app to idle
t = 8.97s Type '[email protected]' into
t = 8.97s Wait for app to idle
t = 9.03s Find the "Search" SearchField
t = 9.03s Snapshot accessibility hierarchy for com.test.mail
t = 9.35s Find: Descendants matching type SearchField
t = 9.35s Find: Element at index 0
t = 9.36s Wait for app to idle
t = 9.42s Synthesize event
t = 10.37s Wait for app to idle
t = 10.44s Check predicate `exists == 1` against object `"Cancel" Button`
t = 10.44s Snapshot accessibility hierarchy for com.test.mail
t = 10.58s Find: Descendants matching type Button
t = 10.58s Find: Elements matching predicate '"Cancel" IN identifiers'
t = 10.58s Tap "Cancel" Button
t = 10.58s Wait for app to idle
t = 10.64s Find the "Cancel" Button
t = 10.64s Snapshot accessibility hierarchy for com.test.mail
t = 10.78s Find: Descendants matching type Button
t = 10.78s Find: Elements matching predicate '"Cancel" IN identifiers'
t = 10.79s Wait for app to idle
t = 11.08s Synthesize event
t = 11.13s Scroll element to visible
t = 11.14s Assertion Failure: UI Testing Failure - Failed to scroll to visible (by AX action) Button 0x7f7fcaebde40: traits: 8589934593, {{353.0, 26.0}, {53.0, 30.0}}, label: 'Cancel', error: Error -25204 performing AXAction 2003
どのように解決するのですか?
ここで、quot;Cancel"ボタンが返されるのでしょう。
false
に対して
hittable
プロパティを使用することで、タップできないようにしています。
もし
tap()
と書かれています。
/*!
* Sends a tap event to a hittable point computed for the element.
*/
- (void)tap;
Xcode 7.1では、いろいろと壊れているようです。私自身(そしてあなたも;)がこれらの問題からブロックされないようにするために、私は
XCUIElement
をタップできるようにする拡張を書きました。以下が参考になると思います。
/*Sends a tap event to a hittable/unhittable element.*/
extension XCUIElement {
func forceTapElement() {
if self.hittable {
self.tap()
}
else {
let coordinate: XCUICoordinate = self.coordinateWithNormalizedOffset(CGVectorMake(0.0, 0.0))
coordinate.tap()
}
}
}
として呼び出すことができるようになりました。
button.forceTapElement()
更新 - Swift 3 の場合は、以下を使用します。
extension XCUIElement {
func forceTapElement() {
if self.isHittable {
self.tap()
}
else {
let coordinate: XCUICoordinate = self.coordinate(withNormalizedOffset: CGVector(dx:0.0, dy:0.0))
coordinate.tap()
}
}
}
関連
-
[解決済み] Xcode 4で「既存のフレームワークを追加」する方法は?
-
[解決済み] Invalid Bundle Error - "requires launch storyboard".
-
[解決済み] 複数のXcodeバージョンをインストールすることはできますか?
-
[解決済み] Xcodeでファイルを実フォルダに移動する
-
[解決済み] SwiftでNSStringからNSDataを作成する
-
[解決済み] アプリケーションの実行権限を変更できなかった
-
[解決済み] Xcode5の*.xccheckoutファイルは、VCSで無視されるべきですか?
-
[解決済み] CFBundle CertUIFramework.axbundleの実行ファイルが見付からない。
-
[解決済み] IBOutletはnilだが、storyboardでは接続されている、Swift
-
[解決済み] Mac Storeにアプリをアップロードすると、API解析の結果が大きすぎる
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Xcodeエラー解決:コマンド /usr/bin/codesign は終了コード1で失敗しました。
-
[解決済み] Xcodeの警告。"出力ファイルに対する複数のビルドコマンド"
-
[解決済み】Xcode 11でSwiftパッケージの依存関係を削除する方法は?
-
[解決済み] SwiftでNSStringからNSDataを作成する
-
[解決済み] アプリケーションの実行権限を変更できなかった
-
[解決済み] Snow LeopardのXcode 4.2でiOS 5.1 SDKを入手することは可能でしょうか?
-
[解決済み] XcodeがIndexingでスタックする
-
[解決済み] iconutilを使用して手動でicnsファイルを作成する方法は?
-
[解決済み] Xcodeで末尾のスペースをトリミングする
-
[解決済み] Mac OS X がプロジェクトのコンパイル時にシステムキーチェーンを使用するように要求する