如果使用Chrome

时间:2016-05-23 11:51:03

标签: input numbers protractor sendkeys ion

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

缺少一些号码。

3 个答案:

答案 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");