W dokumentacji kątomierza widzę następujący przykład:
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');
});
Jasne wydaje się tutaj to, że możesz użyć „by.model” do ustawienia wartości w polu wprowadzania, ale jeśli chcesz spojrzeć na pole wprowadzania i zobaczyć, co w nim jest, musisz użyć „by.binding”.
Mam zestaw kodu, w którym (podsumowując) robię:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.model('risk.name')).getText()).toEqual('A value');
(w moim prawdziwym kodzie zapisuję encję, a następnie wracam do niej w trybie edycji i sprawdzam, czy moja wartość została faktycznie zapisana. Ale nadal sprowadza się to do tego samego, a ten przykładowy kod daje ten sam problem).
To daje mi błąd:
Error: Expected '' to equal 'A value'.
Teoretycznie, idąc za przykładem z dokumentacji, mogę zamiast tego zrobić:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('risk.name)).getText()).toEqual('A value');
Ale by.binding nie wygląda na w pełni kwalifikowany model, pojawia się błąd:
Error: No element found using locator: by.binding("risk.name")
Działa (w pewnym sensie), jeśli:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('name')).getText()).toEqual('A value');
Znajduje element, ale także wyświetla ostrzeżenie, że mam więcej niż jeden element, który pasuje do słowa „nazwa”. I niestety ten, który wybiera, nie jest właściwy.
A więc dwa pytania:
- Czy by.model powinien być w stanie zwrócić metodę getText (), czy też istnieje decyzja projektowa, że tego nie robi i musimy zamiast tego użyć by.binding?
- Czy powinienem być w stanie użyć w pełni kwalifikowanej jednostki w by.binding, czy też istnieje decyzja projektowa, która przez.binding nie lubi pełnej nazwy modelu? Jeśli tak, jakiego innego kwalifikatora mogę użyć do wybrania między moimi różnymi powiązaniami?
EDYTOWAĆ:
Wypróbowałem też rozwiązanie sugerowane przez vdrulerza, zmodyfikowałem kod w następujący sposób:
element(by.model('risk.name')).getText().then(function(text) {
console.log(text);
expect(text).toEqual('A risk name');
});
Console.log zwraca pustą wartość (nie obietnicę ani obiekt), a oczekiwanie nie powiedzie się, podając wiadomość:
Expected '' to equal 'A risk name'.
Rozumiem, że kątomierz już łata oczekiwanie, aby poradzić sobie z obietnicą, więc czuję, że podstawowym problemem jest to, że getText nie działa na polu zidentyfikowanym przez model (mogę z powodzeniem getText na etykietach i innych widżetach).
Mogę również uruchomić następujący kod, używając metody getAttribute zamiast 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');
});
Pierwsza część mija - oczekiwanie działa. Druga część również działa, co sugeruje, że składnia vdrulerz jest również poprawna i rejestruje „prawda” w konsoli. Myślę, że w getText istnieje potencjalna wada?