각도기 문서에서 다음 예를 참조하십시오.
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');
});
여기서 명확하게 보이는 것은 "by.model"을 사용하여 입력 상자에 값을 설정할 수 있다는 것입니다. 그러나 입력 상자를보고 그 안에 들어있는 내용을 보려면 "by.binding"을 사용해야합니다.
요약하면 다음과 같은 코드 세트가 있습니다.
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.model('risk.name')).getText()).toEqual('A value');
(실제 코드에서 엔티티를 저장 한 다음 편집 모드로 돌아와서 제 값이 실제로 저장되었는지 확인하고 있습니다.하지만 여전히 똑같은 것으로 요약되며이 샘플 코드는 동일한 문제를 제공합니다).
이것은 나에게 오류를 준다.
Error: Expected '' to equal 'A value'.
이론적으로 문서의 예를 따르면 대신 다음을 수행 할 수 있습니다.
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('risk.name)).getText()).toEqual('A value');
그러나 by.binding은 정규화 된 모델을 좋아하지 않는 것 같습니다. 오류가 발생합니다.
Error: No element found using locator: by.binding("risk.name")
다음과 같이하면 작동합니다 (패션 이후).
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('name')).getText()).toEqual('A value');
이것은 요소를 찾지 만 'name'과 일치하는 요소가 두 개 이상 있다는 경고도 제공합니다. 그리고 불행히도 그것이 선택하는 것은 올바른 것이 아닙니다.
따라서 두 가지 질문이 있습니다.
- by.model이 getText ()를 반환 할 수 있어야합니까, 아니면 그렇게하지 않는 디자인 결정이 있고 대신 by.binding을 사용해야합니까?
- by.binding에서 정규화 된 엔터티를 사용할 수 있어야합니까? 아니면 by.binding이 전체 모델 이름을 좋아하지 않는다는 디자인 결정이 있습니까? 그렇다면 다른 바인딩 중에서 선택하는 데 사용할 수있는 다른 한정자는 무엇입니까?
편집하다:
나는 또한 vdrulerz가 제안한 솔루션을 시도했으며 다음과 같이 코드를 수정했습니다.
element(by.model('risk.name')).getText().then(function(text) {
console.log(text);
expect(text).toEqual('A risk name');
});
console.log가 빈 값 (프로 미스 또는 객체가 아님)을 반환하고 예상이 실패하여 메시지를 표시합니다.
Expected '' to equal 'A risk name'.
내 이해는 각도기가 이미 약속을 처리 할 것으로 예상되는 패치를 패치했기 때문에 근본적인 문제는 모델을 통해 식별 된 필드에서 작동하지 않는 getText라고 생각합니다 (라벨 및 기타 위젯에서 성공적으로 getText를 얻을 수 있음).
getText () 대신 getAttribute를 사용하여 다음 코드를 실행할 수도 있습니다.
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');
});
첫 번째 부분은 통과합니다. 두 번째 부분도 작동하여 vdrulerz '구문도 유효하며 콘솔에'true '를 기록합니다. getText에 잠재적으로 결함이 있다고 생각합니까?