Ich bin etwas neu für Winkelmesser/Jasmin und vor allem Javascript, um Front-End-Testautomatisierung zu schreiben. Ich habe ein Objekt im DOM, das ich abrufen und auswerten möchte. Es ist im Wesentlichen ein Spaltenhöhenwert. Ich muss dies in einer Funktion in einer separaten Klasse von meinem Testskript überprüfen.Abrufen von Attribut von DOM über externe Funktion, mit Versprechen
Das Testskript Aufruf sieht wie folgt aus (die 'Selektor' vorgegeben ist und gültig):
colHeight = lib.getColumnHeight(selector);
console.log(colHeight);
Die HTML-DOM sieht wie folgt aus:
class="bar" fill-opacity="0.000001" x="123.02739726027396" width="6" height="10.8" y="15.8"
ich die Funktion eingerichtet haben aber denke, ich stolpere über das Versprechen-Konzept; Ich bekomme immer wieder undefined. Was ich will, ist einfach den Wert Höhe zurückgeben.
Hier ist ein Blick auf meine Funktion:
this.getColumnHeight = function(selector) {
var tmpSelector = element(by.css(selector));
var found = new Promise(function(resolve, reject) {
var look = function() {
tmpSelector.getAttribute("height").then(function(text) {
var h = text;
console.log("h = " + h);
return h;
})
}
var value = look();
return value;
})
}
Die Linie:
console.log("h = " + h);
korrekt den Wert zurückgibt.
Ich bin mir nicht sicher, wie man 'h' aus der look() Funktion herausholt und in mein ursprüngliches Testskript zurückkehrt. Wo falle ich hin? Alle Hinweise sehr geschätzt.
EDIT (5/9/16):
nicht klar zu verstehen, wie der Wert zu übergeben zurück in mein Testskript, aus dem dann() Block. Mein aktueller Code gibt ein {ausstehend} für das Versprechen zurück. Vielen Dank im Voraus.
Call (tests.js):
colHeight = lib.getColumnHeight(selector);
console.log(colHeight);
Funktion (lib.js):
this.getColumnHeight = function(selector) {
var tmpSelector = element(by.css(selector));
return new Promise(
function(resolve,reject) {
var height = 0;
setTimeout(function(){ resolve(height); }, 2000);
})
tmpSelector.getAttribute("height").then(function(valueFromResolve) {
A = valueFromResolve;
console.log(A);
return A;
})
}
Es ist nicht klar, warum Sie ein Versprechen brauchen. – Andy
Ich bin sehr offen für Vorschläge. Die Funktion getAttribute basiert auf dem Versprechen. Wenn es eine bessere Lösung gibt, würde ich es gerne hören. – bmagstadt