HTML
<ion-input [(ngModel)]="login.username" ngControl="username1" type="number" #username1="ngForm" id="userName" required>
</ion-input>
提供者测试代码
let usern: ElementFinder = element.all(by.css('.text-input')).get(0);
usern.sendKeys('error');
expect(usern.getAttribute("value")).toEqual("error");
browser.sleep(500);
usern.clear();
browser.sleep(1000);
usern.sendKeys('12345');
找到该元素但未在该字段中输入任何文本。如果我将元素更改为type =“text”,则protractor命令将起作用。页面视图为“e”且无法清除。
其次如果我发送这样的字符串:“we2124will”,实际发送数据为'2124',getAttribute(“value”)的结果为2124.
第三,即使我将sendKeys更改为数字,结果也不是全数字符串。例如:
故障:
1) Login page should input username and password
Message:
Expected '125' to equal '12345'.
Stack:
Error: Failed expectation
缺少一些号码。
答案 0 :(得分:2)
由于您使用的是<ion-input>
,因此实际的HTML <input>
标记将嵌套在其中,并且它不具有id属性。结果是可以选择错误的元素。
尝试使用以下内容来获取嵌套输入标记:
let username = element(by.id('userName')).all(by.tagName('input')).first();
username.sendKeys('fakeUser');
这对我有用。
答案 1 :(得分:1)
作为一种解决方法,您可以引入一个可重用的函数,通过在发送每个密钥之间添加延迟来执行慢速类型。
首先,添加custom sleep()
browser action,将其添加到onPrepare()
:
protractor.ActionSequence.prototype.sleep = function (delay) {
var driver = this.driver_;
this.schedule_("sleep", function () { driver.sleep(delay); });
return this;
};
然后,创建一个可重用的函数:
function slowSendKeys(elm, text) {
var actions = browser.actions();
for (var i = 0, len = text.length; i < len; i++) {
actions = actions.sendKeys(str[i]).sleep(300);
}
return actions.perform();
}
用法:
var elm = $("ion-input#userName");
slowSendKeys(elm, "12345");
答案 2 :(得分:0)
您使用的是什么版本的量角器?
不确定这是问题,但尝试通过ng-model
抓取元素var elem = element(by.model('login.username'));
elem.sendKeys('error');
expect(elem.getAttribute("value")).toEqual("error");
elem.clear();
elem.sendKeys('12345');
expect(elem.getAttribute("value")).toEqual("12345");