Dalam dokumentasi busur derajat, saya melihat contoh berikut:
describe('by model', function() {
it('should find an element by text input model', function() {
var username = element(by.model('username'));
username.clear();
username.sendKeys('Jane Doe');
var name = element(by.binding('username'));
expect(name.getText()).toEqual('Jane Doe');
});
Apa yang tampak jelas di sini adalah Anda dapat menggunakan "by.model" untuk menyetel nilai dalam kotak masukan, tetapi jika Anda ingin melihat kotak masukan dan melihat apa yang ada di dalamnya, Anda perlu menggunakan "by.binding".
Saya memiliki satu set kode di mana (dalam ringkasan) saya lakukan:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.model('risk.name')).getText()).toEqual('A value');
(dalam kode asli saya, saya menyimpan entitas lalu kembali ke mode edit, dan saya memeriksa nilai saya benar-benar disimpan. Tapi intinya masih sama, dan kode contoh ini memberikan masalah yang sama).
Ini memberi saya kesalahan:
Error: Expected '' to equal 'A value'.
Secara teori, dengan mengikuti contoh dari dokumen, saya dapat melakukannya:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('risk.name)).getText()).toEqual('A value');
Tetapi by.binding tampaknya tidak menyukai model yang sepenuhnya memenuhi syarat, saya mendapatkan kesalahan:
Error: No element found using locator: by.binding("risk.name")
Itu berhasil (setelah mode) jika saya melakukannya:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('name')).getText()).toEqual('A value');
Ini menemukan sebuah elemen, tetapi juga memberikan peringatan bahwa saya memiliki lebih dari satu elemen yang cocok dengan 'nama'. Dan sayangnya yang dipilihnya bukanlah yang benar.
Jadi, dua pertanyaan:
- Haruskah by.model dapat mengembalikan getText (), atau apakah ada keputusan desain yang tidak melakukannya dan kita perlu menggunakan by.binding sebagai gantinya?
- Haruskah saya dapat menggunakan entitas yang sepenuhnya memenuhi syarat di by.binding, atau apakah ada keputusan desain bahwa by.binding tidak menyukai nama model lengkap? Jika ya, kualifikasi lain apa yang dapat saya gunakan untuk memilih di antara binding saya yang berbeda?
EDIT:
Saya juga mencoba solusi yang disarankan oleh vdrulerz, saya memodifikasi kode sebagai berikut:
element(by.model('risk.name')).getText().then(function(text) {
console.log(text);
expect(text).toEqual('A risk name');
});
Console.log mengembalikan nilai kosong (bukan janji atau objek), dan ekspektasi gagal memberikan pesan:
Expected '' to equal 'A risk name'.
Pemahaman saya adalah bahwa busur derajat sudah menambal harapan untuk menangani janji, jadi saya merasa bahwa masalah yang mendasarinya adalah getText tidak berfungsi pada bidang yang diidentifikasi melalui model (saya berhasil mendapatkan getText pada label dan widget lainnya).
Saya juga dapat menjalankan kode berikut, menggunakan getAttribute daripada getText ():
expect(element(by.model('risk.name')).getAttribute('autofocus')).toEqual('true');
element(by.model('risk.name')).getAttribute('autofocus').then(function(text) {
console.log(text);
expect(text).toEqual('true');
});
Bagian pertama berlalu - ekspektasi berhasil. Bagian kedua juga berfungsi, menunjukkan bahwa sintaks vdrulerz juga valid, dan mencatat 'true' ke konsol. Saya pikir ada potensi cacat dengan getText?