ข้อผิดพลาดในการจับคู่เหตุการณ์ที่ประทับเวลา: ไม่พบองค์ประกอบที่ตรงกัน


94

ฉันกำลังพยายามสร้าง UItest ใน Xcode เมื่อฉันพยายามปัด UIview ฉันได้รับข้อผิดพลาด:

Timestamped Event Matching Error: Failed to find matching element

หน้าต่างข้อผิดพลาด

ป้อนคำอธิบายภาพที่นี่

สิ่งนี้จะเกิดขึ้นหากฉันพยายามแตะ UIView


ช่วยอธิบายอีกนิดได้ไหม
Dieter Meemken

ฉันพยายามปัดหรือแตะที่ UIview ที่คิดว่าจะทำอะไรบางอย่าง (มีการปรับท่าทางสัมผัสใหม่) แต่เมื่อฉันทำท่าทางข้อผิดพลาดนี้จะเกิดขึ้น วิธีเดียวที่ฉันจะทำให้มันใช้งานได้คือการสอบถาม แต่มันซับซ้อนจริงๆและฉันแน่ใจว่ามีวิธีอื่น
shay

คำตอบ:


47

คุณควรตรวจสอบว่ามีการเปิดใช้งานตัวเลือก "การช่วยการเข้าถึง" สำหรับวัตถุ UIView ที่คุณกำลังกวาดนิ้วอยู่เช่น:

ป้อนคำอธิบายภาพที่นี่


1
การเปิดการเข้าถึงสำหรับ WebView ทำให้การทดสอบของฉันล้มเหลวเมื่อแก้ไขข้อความใน WebView การปิดการช่วยการเข้าถึงสำหรับ UIView ที่โฮสต์ WebView ทำให้การทดสอบประสบความสำเร็จ ดังนั้นจงระวัง
askielboe

1
อีกจุดหนึ่งที่จะทำให้มันใช้งานได้สำหรับฉันฉันต้องให้ป้ายกำกับ
Sean Lintern

ฉันพบว่าโพสต์นี้มีประโยชน์ในการใช้fastlaneเพื่อถ่ายภาพหน้าจอของ tableView stackoverflow.com/a/39331154/4475605
Adrian

ที่นี่ที่ไหน? ฉันจะตั้งค่านี้ได้อย่างไร?
Cory McAboy

@CoryMcAboy คุณสามารถตั้งค่าได้จากรหัสสำหรับมุมมองที่คุณกำหนดเอง:isAccessibilityElement = true
Gleb Tarasov

15

โดยปกติปัญหานี้จะพบเมื่อองค์ประกอบหลักขององค์ประกอบที่คุณต้องการบันทึกถูกตั้งค่าเป็น isAccessibilityElement = true โดยทั่วไปคุณต้องตั้งค่าองค์ประกอบหลักเป็นเท็จเพื่อเข้าถึงองค์ประกอบลูก ตัวอย่างเช่นหากคุณมี UILabel ในมุมมองการช่วยสำหรับการเข้าถึงควรตั้งค่าเป็น false สำหรับมุมมองและตั้งค่าเป็น true สำหรับ UILabel


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()

@ ผู้พัฒนาในฟังก์ชันทดสอบของคุณ
Huy-Anh Hoang
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.