Cara mengurangi waktu default pencarian elemen di appium

Saya baru saja memperhatikan bahwa Appium & Selenium membutuhkan setidaknya 2 menit untuk menemukan elemen ketika elemen tidak ada.

Saya ingin mengurangi waktu pencarian.

Kode adalah:

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

  // DO SOMETHING

}
else
{

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

Sekarang sebagian besar elemen saya tidak tersedia jadi saya ingin appium memeriksanya dan mengalihkannya dengan cepat ke bagian ELSE, tetapi butuh waktu lama, Ada solusi?


person Helping Hands    schedule 07.08.2015    source sumber


Jawaban (2)


Sudahkah Anda memeriksa waktu tunggu implisit?
Secara default, ini adalah 0, tetapi mungkin Anda menyetelnya ke nilai > 2 menit:

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

Jika waktu tunggu implisit Anda lebih besar dari 0 dan Anda mencari elemen dengan

driver.findElements(...);

tetapi Elemen Anda TIDAK ada, maka Selenium akan menunggu SELURUH waktu yang ditentukan!


Selenium saja tidak menunggu, ketika setidaknya satu elemen ditemukan. Dalam hal ini ia akan mencari halaman tersebut satu kali dan segera kembali dengan daftar elemen yang ditemukan.

Jadi findElements() tanpa batasan bagus untuk memeriksa keberadaan suatu elemen, namun hanya baik untuk memeriksa ketidakberadaan ketika Anda menentukan waktu tunggu implisit yang sangat rendah (atau default 0).


Jika Anda benar-benar memerlukan waktu tunggu implisit > 0 karena alasan apa pun, maka Anda dapat membuat metode Anda sendiri yang menangani hal ini seperti di ini solusi.


Dalam kasus Anda, Anda dapat mengatur waktu tunggu implisit ke 0 tepat sebelum kode yang Anda posting:

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");    
}

Jika Anda memerlukan waktu tunggu implisit selain 0 di tempat lain, setel kembali ke nilai asli setelah potongan kode Anda.

person drkthng    schedule 08.08.2015
comment
Terima kasih atas saran Anda, tetapi saya ingin tahu di mana tepatnya saya harus menunggu secara implisit? Karena saya perhatikan bahwa begitu Selenium mulai menemukan elemen, ia tidak mempertimbangkan menunggu dan mencari elemen untuk waktu yang lama. - person Helping Hands; 10.08.2015
comment
seperti yang saya katakan di jawaban, itu tergantung pada bagaimana Anda mencoba menemukan elemen apakah Java mempertimbangkan waktu tunggu atau tidak dalam kasus Anda karena Anda menggunakan findElements, Anda perlu menyetel implisittunggu ke 0 sebelum Anda memanggil metode ini! -› memperbarui jawaban saya - person drkthng; 10.08.2015

Cara yang lebih cepat untuk memeriksanya adalah dengan menyimpan elemen dalam daftar dan kemudian memeriksa apakah kosong

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
}

Semoga ini bisa membantu Anda.

person Vicky    schedule 07.08.2015
comment
Ya, saya sudah melakukan ini juga, ini berfungsi dengan baik tetapi masalah saya memerlukan waktu untuk mencari elemen. Setiap kali saya menggunakan findelements , elemen itu mencari untuk waktu yang lama. Saya ingin mengurangi waktu pencarian itu. - person Helping Hands; 10.08.2015