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?
sumber
getText()
fungsi tidak akan berfungsi seperti dulu untuk webdriver, untuk membuatnya berfungsi untuk busur derajat Anda perlu membungkusnya dalam sebuah fungsi dan mengembalikan teks seperti yang kami lakukan untuk kerangka busur derajat kami, kami telah menyimpannya di fungsi umum seperti -Dengan ini Anda dapat memiliki teks dari sebuah elemen.
Beri tahu saya jika masih belum jelas.
sumber
Saya memiliki masalah ini, saya mencoba solusi Jmr tetapi tidak berhasil untuk saya. Karena semua field input memiliki atribut ng-model, saya dapat menarik atribut tersebut dan mengevaluasinya dan mendapatkan nilainya.
HTML
Busur derajat
sumber
Kode ini berfungsi. Saya memiliki bidang masukan tanggal yang telah disetel ke hanya baca yang memaksa pengguna untuk memilih dari kalender.
untuk tanggal mulai:
untuk tanggal akhir:
sumber
kode di bawah ini berfungsi untuk saya, untuk mendapatkan teks dari input
sumber
Anda harus menggunakan Promise untuk mencetak atau menyimpan nilai elemen.
sumber
Anda bisa mencoba sesuatu seperti ini
Daripada Anda dapat memanggil fungsi ini di mana Anda ingin mendapatkan nilainya ..
sumber
Anda dapat menggunakan jQuery untuk mendapatkan teks di kotak teks (bekerja dengan baik untuk saya), periksa detail gambar
Kode:
Masukkan kueri di atas ini ke kode Anda. Detail gambar:
sumber