2016-05-23 24 views
1

HTMLWie Tastaturbefehle verwenden, wenn die Eingangstypennummer mit Chrome

<ion-input [(ngModel)]="login.username" ngControl="username1" type="number" #username1="ngForm" id="userName" required> 
</ion-input> 

WINKELMESSER TEST CODE

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'); 

Das Element ist gefunden wird, aber kein Text in das Feld eingegeben. Wenn ich das Element in type = "text" ändere, funktioniert der Winkelmesserbefehl. Und die Seitenansicht ist "e" und kann nicht gelöscht werden.

Zweitens, wenn ich Zeichenfolge wie folgt an: „we2124will“, die tatsächlich Daten senden ist ‚2124‘ und das Ergebnis aus getAttribute („value“) ist 2124

Drittens, auch wenn ich die Tastaturbefehle zu Nummer geändert , das Ergebnis ist keine vollständige Zeichenfolge. Zum Beispiel:

Failures:

1) Login page should input username and password 
Message: 
    Expected '125' to equal '12345'. 
Stack: 
    Error: Failed expectation 

Es gibt eine Zahl fehlt.

+0

Verhält sich das Verhalten sowohl in Firefox als auch in Chrome? – alecxe

+0

Und was wäre, wenn Sie es mit der neuesten Winkelmesserversion versuchen würden? – alecxe

+0

Ich habe nur Chrome verwendet, um den Test durchzuführen. Und die Winkelmesserversion ist 3.3.0. –

Antwort

1

Als Workaround können Sie eine wiederverwendbare Funktion einführen, die einen langsamen Typ durch Hinzufügen von Verzögerungen zwischen dem Senden jeder Taste durchführt.

Zunächst einmal, fügen Sie ein custom sleep() browser action, setzen diese zu onPrepare():

protractor.ActionSequence.prototype.sleep = function (delay) { 
    var driver = this.driver_; 
    this.schedule_("sleep", function() { driver.sleep(delay); }); 
    return this; 
}; 

Dann erstellen Sie eine wiederverwendbare Funktion:

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(); 
} 

Verbrauch:

var elm = $("ion-input#userName"); 
slowSendKeys(elm, "12345"); 
+0

Ich bin neu bei Winkelmesser, und es gibt zwei Dinge, die ich vergessen habe: 1. Ich teste ionic 2 ans Typoskript verwenden. Wenn ich die zwei Funktionen oben ausführen. Diese Fehler treten auf: Die Eigenschaft 'sleep' existiert beim Typ 'ActionSequence' nicht. 2. Wenn ich nur die erste Zeile der Verwendung verwende, tritt der folgende Fehler auf: Kein Element gefunden, das locator verwendet: By (CSS-Selektor, ion-input # userName). Haben Sie Vorschläge? –

0

Welche Version von Winkelmesser benutzen Sie?

nicht sicher, das ist das Problem, sondern versuchen, das Element greift durch ng-Modell

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"); 
+0

Ich benutze Progractor 3.3.0 ich versuchte durch.Modell vor, aber erhalten Sie die Fehler unter ' - fehlgeschlagen: unbekannter Fehler: Winkel ist keine (Sitzungsinfo: chrome = 49.0.2623.112) (Treiberinfo: chromedriver = 2.21.371459 ' –

0

Da Sie ein <ion-input> verwenden, der tatsächliche HTML <input> Tag wird innerhalb verschachtelt werden, und es wird nicht haben ein ID-Attribut Der Effekt ist, dass das falsche Element ausgewählt werden kann.

versuchen, etwas wie unten den verschachtelten Eingangs-Tag greifen:

let username = element(by.id('userName')).all(by.tagName('input')).first(); 
username.sendKeys('fakeUser'); 

die für mich gearbeitet.