タイムスタンプ付きイベントマッチングエラー:一致する要素が見つかりませんでした


93

XcodeでUItestを生成しようとしています。UIviewをスワイプしようとすると、エラーが発生します。

Timestamped Event Matching Error: Failed to find matching element

エラーウィンドウ

ここに画像の説明を入力してください

これは、UIViewをタップしようとした場合にも発生します。


もう少し説明してもらえますか?
Dieter Meemken

私は何かをすることを想定しているUIジェスチャをスワイプまたはタップしようとします(ジェスチャ調整機能があります)が、ジェスチャを実行すると、このエラーが発生します。私がそれを機能させるために必要な唯一の方法はクエリを使用することですが、実際には複雑であり、別の方法があることを確信しています
shay

回答:


47

たとえば、次のように、スワイプ元のUIViewオブジェクトで[アクセシビリティ]オプションが有効になっていることを確認する必要があります。

ここに画像の説明を入力してください


1
WebViewのアクセシビリティをオンにすると、WebViewでテキストを解決するときにテストが失敗しました。WebViewをホストしているUIViewのアクセシビリティをオフにすると、テストが成功しました。だから注意してください。
askielboe 2016年

1
私にとってそれを機能させる別のポイントとして、私はそれにラベルを付けなければなりませんでした
ショーン・リンターン

この投稿は、を使用fastlaneしてtableViewのスクリーンショットを撮るのに役立ちました。stackoverflow.com/a/39331154/4475605
Adrian

これはどこ?これをどのように設定しますか?
Cory McAboy 2018年

あなたのカスタムビューのコードからそれを設定することができ@CoryMcAboy:isAccessibilityElement = true
グレブTarasov

14

通常、この問題は、記録したい要素の親要素がisAccessibilityElement = trueに設定されている場合に発生します。一般に、子要素にアクセスするには、親要素をfalseに設定する必要があります。たとえば、ビュー内にUILabelがある場合、ビューのアクセシビリティをfalseに設定し、UILabelのtrueに設定する必要があります。


1
これは正確に再現可能でした。あなたが言ったように、親要素がisAccessibilityElement = trueに設定されていると機能しません!私がそれを偽に戻した後、それは再び働いた。
pommes

3

これが明らかに問題であるXcode 9.3では、私は次のことをしました:

  • Xcodeを終了
  • シミュレーターの設定をリセットします(ハードウェア->すべてのコンテンツと設定を消去します)
  • シミュレーターを終了する
  • 現在のアプリの派生データを削除します
  • Xcodeを再起動します
  • もう一度録音してみてください。今回はうまくいきました。

私はボタンの「skipButton」として識別子を提供し、ボタンを識別するときに常に失敗します。ボタンをapp.buttons ["skipButton ']として識別しています。ご協力に感謝します
Sujit Baranwal

これらの手順は私にはうまくいきませんでした。実際、以前は問題の影響を受けていなかったウィジェットが影響を受けました。
Geoff S

なぜこれにはコンテンツがないのですか?
カラス

2

新しいテストを記録するための解決策はまだないと思います。ただし、既存のテストで拡張機能の強制タップを使用すると、機能します。

使用例:

extension XCUIElement {

    func forceTapElement() {
        if self.hittable {
            self.tap()
        }
        else {
            let coordinate: XCUICoordinate = self.coordinateWithNormalizedOffset(CGVectorMake(0.0, 0.0))
            coordinate.tap()
        }  
    }
}

func testSomethingWithCells() {

   let app = XCUIApplication()
   let cells = app.tables.cells
   sleep(1)
   cells.elementBoundByIndex(0).forceTapElement()
}

ここで元の投稿を確認できます。

Xcode UIテスト-UIテストの失敗-検索フィールドの[キャンセル]ボタンをタップすると、(AXアクションによって)表示にスクロールできませんでした


elementBoundByIndex 'は' element(boundBy :) 'に名前が変更されました。例:cells.element(boundBy:0).tap()
Sujananth

2

私は時々この問題に遭遇しています。DerivedDataからアプリのディレクトリを削除すると役立つようです。


1

私にとってうまくいった解決策は、オブジェクトを異なる方法で識別することでした。
Xcode 8では、以下を使用することができました。

XCUIApplication().tables.cells["Camera Roll"].buttons["Camera Roll"].tap()

Xcode 9では、この質問で述べたエラーが発生しました。うまくいった次のものを使って終わりました(ただし、元のオプションよりも不安定ですが)

XCUIApplication().cells.element(boundBy: 1).tap()

@Developer in your test function
Huy-Anh Hoang '
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.