ทดสอบแอป iOS บน Simulator ด้วย Appium - ไม่พบองค์ประกอบ

ฉันใช้ไคลเอนต์ Appium เพื่อบันทึกและสร้างสคริปต์ทดสอบสำหรับแอป iOS ของฉัน ใน App Inspector ฉันสามารถแตะปุ่มเข้าสู่ระบบและสร้างสคริปต์ (ใน python) ได้ดังนี้:

els1 = driver.find_elements_by_accessibility_id("login")
els1[0].click()

ฉันสามารถเข้าสู่ระบบแอพได้สำเร็จโดยแตะปุ่มบน App Inspector แต่กลับได้รับข้อผิดพลาดขณะเรียกใช้สคริปต์บนเทอร์มินัลของ Mac:

els3[0].คลิก()

IndexError: รายการดัชนีอยู่นอกช่วง

ฉันลองวิธีต่างๆ ในการเข้าถึงองค์ประกอบปุ่มโดยใช้ accessibility id, name และ class name แต่วิธีการข้างต้นไม่ได้ผล

ฉันพลาดอะไร? มันเป็นข้อผิดพลาดของซอฟต์แวร์ Appium หรือไม่?


person devdork    schedule 24.08.2018    source แหล่งที่มา


คำตอบ (2)


ข้อผิดพลาด "IndexError: รายการดัชนีอยู่นอกช่วง" ปรากฏขึ้นหากเราพยายามเข้าถึงรายการที่ดัชนีซึ่งไม่ปรากฏอยู่ในช่วงรายการ

e.g.

thislist = ["apple", "banana", "cherry"] // here list index range is 0-2
thislist[1] = "blackcurrant" // this works fine as value of index is in range 0-2

แต่ถ้าผมลองด้านล่าง

// this is run time error i.e. "IndexError: list index out of range"
//  as value of index is out of range 0-2
    thislist[3] = "blackcurrant" 

หมายเหตุ: ดัชนีรายการเริ่มต้นด้วย 0

พิจารณากรณีที่เมธอด find_elements_by_accessibility_id("login") ไม่ส่งคืนองค์ประกอบใดๆ ไม่ว่าด้วยเหตุผลใดก็ตาม

els1 = driver.find_elements_by_accessibility_id("login");

และฉันพยายามเข้าถึงรายการ els1 ที่ดัชนี 0 ซึ่งว่างเปล่า ดังนั้นฉันจึงได้รับข้อผิดพลาด "IndexError: รายการดัชนีอยู่นอกช่วง"

ตอนนี้ก่อนที่จะเข้าถึงรายการเราจะตรวจสอบว่ารายการในนั้นไม่ว่างเปล่าหรือไม่

els1 = driver.find_elements_by_accessibility_id("login")
if els1:
   els1[0].click()
else :
   print "Element not found and els1 array is empty"        
person Amit Jain    schedule 24.08.2018
comment
แม้ว่ารหัสนี้อาจตอบคำถามได้ แต่การให้บริบทเพิ่มเติมเกี่ยวกับวิธีการและ/หรือสาเหตุที่รหัสนี้สามารถแก้ไขปัญหาได้จะช่วยเพิ่มมูลค่าในระยะยาวของคำตอบได้ - person Nic3500; 25.08.2018
comment
มีวิธีเข้าถึงองค์ประกอบอย่างถูกต้องเพื่อให้รายการไม่ว่างเปล่าหรือไม่? - person devdork; 27.08.2018
comment
รายการจะว่างเปล่าหรือไม่ขึ้นอยู่กับกลยุทธ์ของตัวระบุตำแหน่ง เราสามารถตรวจสอบขนาดของรายการได้เสมอก่อนที่จะคลิกองค์ประกอบ เพื่อหลีกเลี่ยงข้อยกเว้นในคอลเลกชัน (รายการ) ที่เราใช้จัดเก็บองค์ประกอบ - person Amit Jain; 27.08.2018

หลังจากลองใช้ Google เป็นเวลาหลายชั่วโมง ฉันพบว่าปัญหาเกี่ยวกับการรีเฟรชมุมมอง

ทุกครั้งที่มีการเปลี่ยนมุมมองหรือการนำทาง ต้องใช้เวลาในการอัปเดตมุมมอง เมื่อทุกอย่างได้รับการอัปเดตแล้ว webDriver จะสามารถระบุองค์ประกอบได้สำเร็จโดยใช้พารามิเตอร์การค้นหาที่กำหนด

ดังนั้นระหว่างการโต้ตอบทุกครั้ง ให้รอสักครู่:

el1 = driver.find_element_by_accessibility_id("login")
el1.click()
// wait for the view to get updated
driver.implicitly_wait(1)

els2 = driver.find_elements_by_name("Edit")
els2[0].click()

และสคริปต์จะทำงานตามที่คาดไว้

person devdork    schedule 29.08.2018