영사기에서 입력에 텍스트를 가져오는 방법
견인기 매뉴얼에는 다음 예가 나와 있습니다.
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()를 반환할 수 있습니까?아니면 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() 대신 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에 결함이 있을 수 있다고 생각합니다.
이 답변은 프로젝터 FAQ(https://github.com/angular/protractor/blob/master/docs/faq.md#the-result-of-gettext-from-an-input-element-is-always-empty에서 확인할 수 있습니다.
입력 요소의 getText 결과는 항상 비어 있습니다.
이것은 웹 드라이버 쿼크입니다.요소는 항상 빈 getText 값을 가집니다.대신 다음을 시도해 보십시오.
element.getAttribute('value')
질문 2에 대해서는 by.binding에 완전 수식명을 사용할 수 있습니다.귀사의 템플릿에는 {{}} 또는 ng-module을 통해 risk.name에 바인드된 요소가 없을 것으로 생각됩니다.
getText()
이 함수는 웹 드라이버의 예전 방식과는 다르게 동작합니다.프로젝터용으로 기능하기 위해서는 함수를 랩하고, 프로젝터 프레임워크에서 했던 것과 같은 텍스트를 반환해야 합니다.우리는 그것을 다음과 같은 공통 함수로 유지하고 있습니다.
getText : function(element, callback) {
element.getText().then (function(text){
callback(text);
});
},
이를 통해 요소의 텍스트를 얻을 수 있습니다.
아직 불분명하면 알려주세요.
Jmr의 솔루션을 시도해 본 적이 있는데 효과가 없었습니다.모든 입력 필드에는 ng-model 속성이 있기 때문에 속성을 추출하여 평가하여 값을 얻을 수 있습니다.
HTML
<input ng-model="qty" type="number">
프로젝터
var qty = element( by.model('qty') );
qty.sendKeys('10');
qty.evaluate(qty.getAttribute('ng-model')) //-> 10
아래 코드는 입력에서 텍스트를 얻는 데 도움이 됩니다.
return(this.webelement.getAttribute('value').then(function(text)
{
console.log("--------" + text);
}))
이 코드는 동작합니다.사용자가 달력에서 선택하도록 하는 읽기 전용으로 설정된 날짜 입력 필드가 있습니다.
시작 날짜:
var updateInput = "var input = document.getElementById('startDateInput');" +
"input.value = '18-Jan-2016';" +
"angular.element(input).scope().$apply(function(s) { s.$parent..searchForm[input.name].$setViewValue(input.value);})";
browser.executeScript(updateInput);
종료일:
var updateInput = "var input = document.getElementById('endDateInput');" +
"input.value = '22-Jan-2016';" +
"angular.element(input).scope().$apply(function(s) { s.$parent.searchForm[input.name].$setViewValue(input.value);})";
browser.executeScript(updateInput);
Promise를 사용하여 요소의 값을 인쇄하거나 저장해야 합니다.
var ExpectedValue:string ="AllTestings.com";
element(by.id("xyz")).getAttribute("value").then(function (Text) {
expect(Text.trim()).toEqual("ExpectedValue", "Wrong page navigated");//Assertion
console.log("Text");//Print here in Console
});
이런 걸 시도해 보세요.
var access_token = driver.findElement(webdriver.By.name("AccToken"))
var access_token_getTextFunction = function() {
access_token.getText().then(function(value) {
console.log(value);
return value;
});
}
값을 얻고자 하는 함수를 호출할 수 있습니다.
jQuery를 사용하여 텍스트 상자에 텍스트를 가져올 수 있습니다(내게 잘 작동합니다). 이미지 세부 정보를 확인하십시오.
코드:
$(document.evaluate( "xpath" ,document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue).val()
Example:
$(document.evaluate( "//*[@id='mail']" ,document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue).val()
위의 쿼리를 코드에 주입합니다.이미지 상세:
언급URL : https://stackoverflow.com/questions/20310442/how-to-gettext-on-an-input-in-protractor
'programing' 카테고리의 다른 글
Chrome에서 https "not secure" 메시지를 수정하는 방법 (0) | 2023.03.07 |
---|---|
타이프 스크립트에서 문자열이 숫자인지 확인하는 방법 (0) | 2023.03.07 |
C#을 통해 Oracle Database에 연결하시겠습니까? (0) | 2023.03.02 |
각도에서의 객체 비교 (0) | 2023.03.02 |
기존 Angular1 웹 앱을 Cordova 앱으로 변환하는 방법 (0) | 2023.03.02 |