Kunci kirim tidak berfungsi dengan Model Objek Halaman

Saya baru mulai bereksperimen dengan Model Objek Halaman menggunakan Busur Derajat pada aplikasi non-sudut. Saya bukan pemula, tapi belum ahli, jadi maafkan saya jika kata-kata saya salah. Saya telah meneliti dan mencoba saran selama berhari-hari tanpa hasil. Saya memiliki elemen ini-

<input type="text" class="form-control" name="form_component_data[AgentsSettings][agent][chat_welcome_msg]" id="agentssettings-agent-chat_welcome_msg" value="How can I help">

Di POM saya, saya punya

var txtWelcomemessage = element(by.css("input[name='form_component_data[AgentsSettings][agent][chat_welcome_msg]']"));

    this.clearWelcomemessage = function(){
    txtWelcomemessage.clear();
    };

    this.clearWelcomemessage = function(){
    txtWelcomemessage.clear();
    };

    this.setWelcomemessage = function(){
    txtWelcomemessage.sendKeys();
      };

Dalam Skrip Tes Saya, saya punya

settings.clearWelcomemessage();
browser.sleep('5000');

settings.setWelcomemessage('Hey, Hey, Hey');
browser.sleep('5000');

Hapus pesan berfungsi, saya melihat kursor di bidang setelah menghapus pesan, tetapi tombol kirim tidak melakukan apa pun dan tidak ada kesalahan.

Namun, ketika saya memasukkan kode di bawah ini langsung ke skrip pengujian, pesannya hilang dan tombol kirim berfungsi dengan sempurna.

driver.findElement(by.css("input[name='form_component_data[AgentsSettings][agent] 
[chat_welcome_msg]']")).click();
browser.sleep('3500')
driver.findElement(by.css("input[name='form_component_data[AgentsSettings][agent] 
[chat_welcome_msg]']")).sendKeys('Hey, Hey, Hey');

Ini adalah bidang ke-3 yang saya kerjakan dalam aplikasi sejauh ini. Dua bidang pertama berfungsi menggunakan POM tanpa masalah apa pun. Saya tidak yakin apa yang berbeda dari yang satu ini. Saya dapat menggunakan ini sebagai solusinya, tetapi saya hanya ingin tahu apa yang saya lewatkan di objek halaman.


person Devy16    schedule 06.07.2021    source sumber
comment
Apakah Anda benar-benar await fungsinya? settings.clearWelcomemessage() dan browser.sleep() adalah async. Silakan coba tambahkan pernyataan console.log() di antara setiap tindakan dan periksa apakah sleep benar-benar berfungsi..   -  person Silvan Bregy    schedule 08.07.2021
comment
@SilvanBregy Dengan asumsi saya melakukan ini dengan benar, sepertinya tidur sedang terjadi. Inilah yang saya gunakan. settings.clearPesan Selamat Datang(); browser.sleep('5000').then(console.log('Pesan Dihapus')); settings.setWelcomemessage('Hai. Ada yang bisa saya bantu'); browser.sleep('5000').then(console.log('Pesan Selamat Datang Dimasukkan'));   -  person Devy16    schedule 08.07.2021


Jawaban (1)


Jika kode asli Anda terlihat seperti ini:


settings.clearWelcomemessage();
browser.sleep('5000');

settings.setWelcomemessage('Hey, Hey, Hey');
browser.sleep('5000');

Maka ini tidak akan berhasil, karena semua operasi ini adalah fungsi asynchronius. Artinya, mereka tidak mengeksekusi secara linier. Bahasa pemrograman lain biasanya menunggu suatu fungsi selesai sebelum melanjutkan ke baris berikutnya, tetapi dalam kasus operasi async di js/nodejs, hal ini tidak terjadi.

Silakan coba menunggu dengan benar setiap fungsi yang dijalankan ::

settings.clearWelcomemessage().then(() => {
    console.log('cleared welcome messgae! ')
    return browser.sleep('5000').then(() => {
        console.log('slept 5000')
        return settings.setWelcomemessage('Hey, Hey, Hey').then(() => {
            console.log('welcome message set!')
            return browser.sleep('5000').then(() => {
                console.log('second sleap done!')
            })
        })
    })
}).catch(err => console.error('error occured!', err))


Anda juga harus menyesuaikan fungsinya sendiri. Mereka menjalankan operasi async dan Anda harus selalu mengembalikan hasilnya, karena mereka mengembalikan objek Promise. Dokumen

Sunting:

Sebenarnya, tambahkan parameter ke sendKeys() . Tanpa ada kunci yang akan dikirim..

this.clearWelcomemessage = function(){
        return txtWelcomemessage.clear();
    };

    this.clearWelcomemessage = function(){
        return txtWelcomemessage.clear();
    };

    // add message parameter. Or no message will be sent :) 
    this.setWelcomemessage = function(message){
        return txtWelcomemessage.sendKeys(message);
      };

Jika itu menyelesaikan masalah, Anda harus mempelajari tentang promises resp. async & await dll.

Jika Anda mengetahui operasi async dan cara kerjanya, harap sesuaikan kode Anda di pertanyaan karena itu bukan kode asli..

person Silvan Bregy    schedule 08.07.2021
comment
Saya memperbarui kodenya dan berfungsi dengan baik, tetapi kunci kirim masih tidak melakukan apa pun. Yang aneh adalah ia tidak gagal dalam ujian. Saya tidak dapat menemukan informasi apa pun tentang mengapa kunci tersebut dianggap dikirim. Saya juga membaca dokumentasi yang Anda berikan. Terima kasih - person Devy16; 08.07.2021
comment
Yah, saya kira Anda sebenarnya lupa mengirimkan kuncinya? belum menyadarinya sampai sekarang. Saya memperbarui jawaban saya - person Silvan Bregy; 09.07.2021
comment
Anda juga dapat melihat jawaban ini =› stackoverflow.com/questions/50970567/ - person Silvan Bregy; 09.07.2021
comment
Ahhh. Ya, fungsi di objek halaman awalnya kosong. Itulah yang hilang dan mengapa itu tidak berhasil. Terima kasih untuk bantuannya. - person Devy16; 09.07.2021