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?
źródło
getText()
funkcja nie będzie działać tak jak kiedyś dla webdrivera, aby sprawić, że będzie działać dla kątomierza, będziesz musiał zawinąć ją w funkcję i zwrócić tekst tak, jak zrobiliśmy to dla naszego frameworka kątomierza, który trzymaliśmy w wspólna funkcja, taka jak -Dzięki temu możesz mieć tekst elementu.
Daj mi znać, jeśli nadal jest niejasne.
źródło
Miałem ten problem, wypróbowałem rozwiązanie Jmr, ale nie zadziałało. Ponieważ wszystkie pola wejściowe mają atrybuty modelu ng, mogę wyciągnąć atrybut, ocenić go i uzyskać wartość.
HTML
Kątomierz
źródło
Ten kod działa. Mam pole wprowadzania daty, które zostało ustawione jako tylko do odczytu, co zmusza użytkownika do wybrania z kalendarza.
na datę rozpoczęcia:
na datę końcową:
źródło
poniższy kod działa dla mnie, aby uzyskać tekst z wejścia
źródło
Musisz użyć Promise, aby wydrukować lub zapisać wartości elementu.
źródło
Możesz spróbować czegoś takiego
Niż możesz wywołać tę funkcję, w której chcesz uzyskać wartość.
źródło
Możesz użyć jQuery, aby uzyskać tekst w polu tekstowym (dla mnie działa dobrze), sprawdź szczegóły obrazu
Kod:
Wprowadź powyższe zapytanie do swojego kodu. Szczegóły obrazu:
źródło