Alternatif untuk thread.sleep(9000) di setiap baris di Selenium

I have been using thread.sleep(9000) almost after every line of code in selenium which is making me wait for long.Can anybody suggest me an alternate way to reduce this.As my application is taking time load a page it needs to wait until a particular page is loaded to perform any action.

WebElement un = driver.findElement(By.id("login_username_id"));
            un.sendKeys(username);
            WebElement pwd = driver.findElement(By.id("login_password_id"));
            pwd.sendKeys(password);

            try {
                Thread.sleep(25000);
            } catch (InterruptedException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            driver.findElement(By.id("login_submit_id")).click();
            try {
                Thread.sleep(9000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

Saya ingin mengurangi penggunaan thread.sleep setelah setiap baris dan menggunakan satu fungsi umum sehingga menunggu kapan pun diperlukan.


person Vdev    schedule 25.05.2016    source sumber


Jawaban (3)


gunakan contoh di bawah ini:

public class Main{

static WebDriver driver = new FirefoxDriver();

public static void main(String [] args) throws InterruptedException{

    WebElement un = driver.findElement(By.id("login_username_id"));
    un.sendKeys(username);
    WebElement pwd = driver.findElement(By.id("login_password_id"));
    pwd.sendKeys(password);

    waitForElement(By.id("ur id"),60);

    driver.findElement(By.id("login_submit_id")).click();

    waitForElement(By.id("ur id"),60);


}

/**
 * wait until expected element is visible
 *
 * @param   expectedElement     element to be expected
 * @param   timeout             Maximum timeout time
 */
public static void waitForElement(By expectedElement, int timeout) {
    try {
        WebDriverWait wait = new WebDriverWait(driver, timeout);
        wait.until(ExpectedConditions.visibilityOfElementLocated(expectedElement));

    } catch (Exception e) {
        e.printStackTrace();
        //System.out.println("print ur message here");
    }
}
}

jika Anda memiliki kebingungan, beri tahu saya.

person noor    schedule 25.05.2016
comment
di mana saya harus menyebutkan elemennya, maksud saya baris yang mana dan bisakah Anda memberi saya contoh, apakah seperti ini? Katakan jika saya ingin menunggu setelah pernyataan ini bagaimana saya harus menulis? driver.findElement(By.id(login_submit_id)).click(); - person Vdev; 25.05.2016
comment
gunakan metode seperti : waitForElement(By.id(login_submit_id) , 60); - person noor; 25.05.2016
comment
Anda juga dapat menggunakan By.cssSelector atau By.class .... ini akan menunggu maksimal 60 detik...tetapi jika elemen ditemukan setelah 1 detik, penantian akan selesai - person noor; 25.05.2016
comment
seperti saya memiliki kode saya seperti ini..bisakah Anda menambahkan kode Anda dan mengirimkan saya public static void main(String[] args) throws InterruptedException { WebDriver driver=new FirefoxDriver();WebElement un = driver.findElement(By.id(login_username_id )); un.sendKeys(nama pengguna); WebElement pwd = driver.findElement(By.id(login_password_id)); pwd.sendKeys(kata sandi);/*coba { Thread.sleep(25000); } catch (InterruptedException e1) { // TODO Blok tangkapan yang dibuat secara otomatis e1.printStackTrace(); }*/ driver.findElement(By.id(login_submit_id)).click(); - person Vdev; 25.05.2016
comment
saya telah memberikan contoh kelas lengkap dalam kode saya yang diperbarui. salin dan impor paket yang diperlukan dan jalankan. - person noor; 25.05.2016
comment
Dan setelah pernyataan manakah saya harus menggunakan metode ini?public static void waitForElement(By ExpectElement, int timeout)...seperti setelah ini?WebDriver driver=new FirefoxDriver(); - person Vdev; 25.05.2016
comment
Mari kita melanjutkan diskusi ini di chat. - person noor; 25.05.2016
comment
apakah ini baik-baik saja... @Vdev? - person noor; 26.05.2016
comment
Halo noor, saya memerlukan saran Anda mengenai satu hal, saya telah menerapkan kerangka kerja berbasis data dan menulis beberapa skrip, apa yang dapat saya lakukan selanjutnya dan bagaimana Anda menilai bahwa kode saya cukup baik sesuai standar? - person Vdev; 14.06.2016
comment
@Vdev sebenarnya menurut saya itu pertanyaan lain.... pertama-tama Anda harus menerima jawabannya jika jawabannya membantu Anda dan kemudian Anda dapat mengajukan pertanyaan lain dengan detail untuk solusinya. stackoverflow tidak menyukai obrolan yang terlalu panjang. - person noor; 14.06.2016

Hai, silakan gunakan penantian universal dalam skrip Anda, yaitu penantian implisit

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

baris di atas beri tahu Selenium untuk menunggu maksimal 10 detik untuk setiap elemen web sebelum melakukan kesalahan apa pun (perhatikan Anda dapat menambah atau mengurangi detik, itu tergantung pada Anda)

tunggu eksplisit : ketika Anda ingin menunggu elemen web tertentu (gunakan ini jika menurut Anda elemen tertentu membutuhkan waktu lebih lama dari biasanya untuk memuat)

WebDriverWait wait = new WebDriverWait(driver, timeout);
wait.until(ExpectedConditions.visibilityOfElementLocated(your element));
person eduliant    schedule 25.05.2016
comment
saya menggunakan pernyataan ini tetapi bagaimana jika saya ingin menunggu setelah setiap pernyataan?bagaimana cara menggunakannya?Katakanlah elemen saya begitu(By.id(login_password_id)); - person Vdev; 25.05.2016
comment
dalam hal ini gunakan menunggu universal pada saat pembuatan browser seperti WebDriver driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); - person eduliant; 25.05.2016
comment
tetapi driver.manage tidak membantu,,, ia mengharapkan thread.sleep setelah setiap baris - person Vdev; 25.05.2016
comment
tolong tambah waktu driver.manage menjadi 50 detik lihat apakah itu membantu - person eduliant; 25.05.2016
comment
Tidak, itu tidak membantu,,, saya perlu menulis sesuatu yang sama untuk menghindari hal ini. Saya mendapatkan kesalahan ini. Pengecualian di thread main org.openqa.selenium.WebDriverException: Elemen tidak dapat diklik pada titik (858, 409.933349609375). Elemen lain akan menerima klik: ‹div style=opacity: 0.7; id=loading-messages›‹/div› Durasi atau batas waktu perintah: 147 milidetik Info pembuatan: versi: '2.52.0', revisi: '4c2593c', waktu: '11-02-2016 19:06:42' Info sistem : host: 'desktop-svc71', ip: '10.2.2.54', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_73 ' - person Vdev; 25.05.2016
comment
WebDriverWait tunggu = WebDriverWait baru(driver, batas waktu); wait.until(ExpectedConditions.visibilityOfElementLocated(elemen Anda)); Dalam hal ini, bisakah Anda memberi tahu bagaimana saya bisa menulis untuk kode saya di atas? - person Vdev; 25.05.2016
comment
hai sesuai masalah kesalahan Anda bukan dengan menunggu implisit, Selenium berfungsi dengan baik dapat diklik. Tetapi elemen yang ingin Anda klik belum diperbaiki [posisinya di html sehingga elemen lain akan menerima klik - person eduliant; 25.05.2016
comment
Untuk mengatasi kesalahan Pengecualian di utas utama org.openqa.selenium.WebDriverException: Elemen tidak dapat diklik pada titik (858, 409.933349609375). tolong lakukan satu hal tolong ubah browser Anda dari chrome menjadi firefox atau ikuti tautan ini stackoverflow.com/questions/37388866/ - person eduliant; 25.05.2016

Anda dapat memberikan pernyataan yang mengatakan "Apakah elemen tertentu ditampilkan atau tidak" sehingga driver web akan menghabiskan waktu untuk mencari elemen tersebut yang akan menyebabkan penundaan dalam eksekusi.

Contoh: Suatu halaman mungkin berisi beberapa tombol yang menjadikannya sebagai target dan memberitahu driver web untuk menemukannya.

person Venkatesh Yalavatthi    schedule 25.05.2016