Trong tài liệu về thước đo góc, tôi thấy ví dụ sau:
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');
});
Điều rõ ràng ở đây là bạn có thể sử dụng "by.model" để đặt giá trị trong hộp nhập liệu, nhưng nếu bạn muốn nhìn vào hộp nhập liệu và xem có gì trong đó, bạn cần sử dụng "by.binding".
Tôi có một bộ mã trong đó (tóm lại) tôi làm:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.model('risk.name')).getText()).toEqual('A value');
(trong mã thực của mình, tôi lưu thực thể sau đó quay lại nó ở chế độ chỉnh sửa và tôi đang kiểm tra giá trị của mình đã thực sự được lưu chưa. Nhưng nó vẫn diễn ra như cũ và mã mẫu này đưa ra cùng một vấn đề).
Điều này mang lại cho tôi một lỗi:
Error: Expected '' to equal 'A value'.
Về lý thuyết, làm theo ví dụ từ tài liệu, thay vào đó tôi có thể làm:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('risk.name)).getText()).toEqual('A value');
Nhưng by.binding dường như không thích mô hình đủ điều kiện, tôi gặp lỗi:
Error: No element found using locator: by.binding("risk.name")
Nó hoạt động (sau một thời trang) nếu tôi làm:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('name')).getText()).toEqual('A value');
Điều này tìm thấy một phần tử, nhưng cũng đưa ra cảnh báo rằng tôi có nhiều phần tử khớp với 'name'. Và tiếc là cái nó chọn không phải là cái đúng.
Vì vậy, hai câu hỏi:
- Liệu by.model có thể trả về getText () hay có một quyết định thiết kế rằng nó không làm điều đó và chúng ta cần sử dụng by.binding thay thế?
- Liệu tôi có thể sử dụng một thực thể đủ điều kiện trong by.binding hay có một quyết định thiết kế mà by.binding không thích tên model đầy đủ? Nếu vậy, tôi có thể sử dụng định tính nào khác để chọn giữa các ràng buộc khác nhau của mình?
BIÊN TẬP:
Tôi cũng đã thử giải pháp do vdrulerz đề xuất, tôi đã sửa đổi mã như sau:
element(by.model('risk.name')).getText().then(function(text) {
console.log(text);
expect(text).toEqual('A risk name');
});
Console.log đang trả về một giá trị trống (không phải là một lời hứa hoặc một đối tượng) và mong đợi không đưa ra thông báo:
Expected '' to equal 'A risk name'.
Sự hiểu biết của tôi là thước đo góc đã vá lỗi mong đợi để xử lý lời hứa, vì vậy tôi cảm thấy rằng vấn đề cơ bản là getText không hoạt động trên một trường được xác định thông qua một mô hình (tôi có thể getText thành công trên nhãn và các tiện ích con khác).
Tôi cũng có thể chạy mã sau, sử dụng getAttribute thay vì 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');
});
Phần đầu tiên trôi qua - mong đợi hoạt động. Phần thứ hai cũng hoạt động, cho thấy rằng cú pháp vdrulerz 'cũng hợp lệ và nó ghi' true 'vào bảng điều khiển. Tôi nghĩ rằng có thể có một khiếm khuyết với getText?