İletki belgelerinde aşağıdaki örneği görüyorum:
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');
});
Burada açıkça görünen şey, bir giriş kutusunda değerleri ayarlamak için "by.model" i kullanabileceğinizdir, ancak bir giriş kutusuna bakmak ve içinde ne olduğunu görmek istiyorsanız, "by.binding" kullanmanız gerekir.
(Özet olarak) yaptığım bir dizi kodum var:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.model('risk.name')).getText()).toEqual('A value');
(gerçek kodumda varlığı kaydederim, ardından düzenleme modunda ona geri dönerim ve değerimin gerçekten kaydedilmiş olduğunu kontrol ederim. Ama yine de aynı şeyi gösterir ve bu örnek kod aynı sorunu verir).
Bu bana bir hata veriyor:
Error: Expected '' to equal 'A value'.
Teorik olarak, dokümanlardaki örneği takip ederek, bunun yerine yapabilirim:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('risk.name)).getText()).toEqual('A value');
Ancak by.binding, tam nitelikli modeli beğenmiyor, bir hata alıyorum:
Error: No element found using locator: by.binding("risk.name")
Yaparsam işe yarıyor (bir modadan sonra):
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('name')).getText()).toEqual('A value');
Bu bir öğe bulur, ancak aynı zamanda 'ad' ile eşleşen birden fazla öğem olduğuna dair bir uyarı verir. Ve maalesef seçtiği doğru olanı değil.
Öyleyse, iki soru:
- By.model bir getText () döndürebilmeli mi, yoksa bunu yapmayacağına ve bunun yerine by.binding kullanmamız gerektiğine dair bir tasarım kararı var mı?
- By.binding'de tam nitelikli bir varlık kullanabilmeli miyim, yoksa by.binding'in tam model adını beğenmediği bir tasarım kararı var mı? Öyleyse, farklı bağlamalarım arasında seçim yapmak için başka hangi niteleyiciyi kullanabilirim?
DÜZENLE:
Vdrulerz tarafından önerilen çözümü de denedim, kodu aşağıdaki gibi değiştirdim:
element(by.model('risk.name')).getText().then(function(text) {
console.log(text);
expect(text).toEqual('A risk name');
});
Console.log boş bir değer döndürüyor (bir söz veya bir nesne değil) ve bekleme mesajı vermeyi başaramıyor:
Expected '' to equal 'A risk name'.
Anladığım kadarıyla iletki, vaatle başa çıkma beklentisini zaten yamalıyor, bu yüzden temel sorunun, getText'in bir model aracılığıyla tanımlanan bir alanda çalışmaması olduğunu hissediyorum (etiketler ve diğer gereçler üzerinde başarılı bir şekilde Metin alabilirim).
GetText () yerine getAttribute kullanarak aşağıdaki kodu da çalıştırabilirim:
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');
});
İlk bölüm geçer - beklenen işler. İkinci bölüm de çalışır, vdrulerz 'sözdiziminin de geçerli olduğunu ve konsola' true 'kaydettiğini gösterir. GetText ile ilgili potansiyel bir kusur olduğunu düşünüyorum.