วิธีลดเวลาเริ่มต้นการค้นหาองค์ประกอบใน appium

ฉันเพิ่งสังเกตเห็นว่า Appium & Selenium ใช้เวลาอย่างน้อย 2 นาทีในการค้นหาองค์ประกอบเมื่อไม่มีองค์ประกอบอยู่ที่นั่น

ฉันต้องการลดเวลาในการค้นหา

รหัสคือ:

 if(!driver.findElements(By.id(AppConstants.notificationcount)).isEmpty())
{

  // DO SOMETHING

}
else
{

   System.out.println("No Element available");    
}

ตอนนี้องค์ประกอบส่วนใหญ่ของฉันไม่พร้อมใช้งาน ดังนั้นฉันจึงต้องการให้ appium ตรวจสอบและเปลี่ยนเส้นทางไปยังส่วน ELSE อย่างรวดเร็ว แต่ใช้เวลานาน มีวิธีแก้ไขไหม


person Helping Hands    schedule 07.08.2015    source แหล่งที่มา


คำตอบ (2)


คุณได้ตรวจสอบเวลารอโดยนัยแล้วหรือยัง
โดยค่าเริ่มต้นจะเป็น 0 แต่บางทีคุณอาจตั้งค่าไว้ที่ใดที่หนึ่งเป็นค่า > 2 นาที:

driver.manage().timeouts().implicitlyWait(timeInSeconds, TimeUnit.SECONDS);

หากเวลารอโดยนัยของคุณมากกว่า 0 และคุณกำลังค้นหาองค์ประกอบด้วย

driver.findElements(...);

แต่ องค์ประกอบของคุณไม่มีอยู่ ดังนั้น ซีลีเนียมจะรอตามเวลาที่กำหนดทั้งหมด!


ซีลีเนียมจะไม่รอ เมื่อพบอย่างน้อยหนึ่งองค์ประกอบ ในกรณีนี้ มันจะค้นหาเพจหนึ่งครั้งและกลับมาทันทีพร้อมรายการองค์ประกอบที่พบ

ดังนั้น findElements() จึงไม่มีข้อจำกัดที่ดีในการตรวจสอบการมีอยู่ขององค์ประกอบ แต่ เหมาะสำหรับการตรวจสอบการไม่มีอยู่เท่านั้น เมื่อคุณระบุเวลารอโดยนัยที่ต่ำมาก (หรือค่าเริ่มต้น 0)


หากคุณต้องการเวลารอโดยนัย > 0 ไม่ว่าด้วยเหตุผลใดก็ตาม คุณสามารถสร้างวิธีการของคุณเองที่จัดการสิ่งนี้ได้ใน นี่ วิธีแก้ปัญหา


ในกรณีของคุณ คุณสามารถตั้งเวลารอโดยนัยเป็น 0 ก่อนโค้ดที่คุณโพสต์:

driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
// then follows your code:
if(!driver.findElements(By.id(AppConstants.notificationcount)).isEmpty())
{

  // DO SOMETHING

}
else
{

   System.out.println("No Element available");    
}

หากคุณต้องการเวลารอโดยนัยอื่นที่ไม่ใช่ 0 ให้ตั้งค่ากลับเป็นค่าเดิมหลังจากโค้ดของคุณ

person drkthng    schedule 08.08.2015
comment
ขอบคุณสำหรับข้อเสนอแนะของคุณ แต่ฉันอยากรู้ว่าฉันควรรอโดยปริยายตรงไหน? เพราะสังเกตว่าเมื่อซีลีเนียมเริ่มค้นหาธาตุแล้ว ก็ไม่ได้ถือว่ารอและค้นหาธาตุเป็นเวลานาน - person Helping Hands; 10.08.2015
comment
อย่างที่ฉันบอกไปแล้วในคำตอบ มันขึ้นอยู่กับว่าคุณพยายามค้นหาองค์ประกอบอย่างไรหาก Java พิจารณาเวลารอหรือไม่ในกรณีของคุณ เนื่องจากคุณใช้ findElements คุณต้องตั้งค่า implicitwait เป็น 0 ก่อนที่คุณจะเรียกใช้เมธอดนี้! -› อัปเดตคำตอบของฉัน - person drkthng; 10.08.2015

วิธีตรวจสอบที่รวดเร็วกว่าคือจัดเก็บองค์ประกอบไว้ในรายการ จากนั้นตรวจสอบว่าว่างเปล่าหรือไม่

List<WebElement> elements = driver.findElements(By.id("AppConstants.notificationcount"));
 if (elements.isEmpty()) {
    System.out.println("No Element available");
        }else{
          elements.get(0).click();//if present click the element
}

หวังว่านี่จะช่วยคุณได้

person Vicky    schedule 07.08.2015
comment
ใช่ ฉันทำสิ่งนี้ไปแล้ว มันทำงานได้ดี แต่ปัญหาของฉันต้องใช้เวลาในการค้นหาองค์ประกอบ เมื่อใดก็ตามที่ฉันใช้ findelements มันจะค้นหาองค์ประกอบเป็นเวลานาน ฉันต้องการลดเวลาในการค้นหาลง - person Helping Hands; 10.08.2015