Winkelmesser e2e-test geschrieben, in Maschinenschrift, mit page-Objekt
Ich versuche zu schreiben, e2e tests in Maschinenschrift, mithilfe von Geodreieck und Jasmin-syntax mit einem Page-Objekt zu abstrahieren, die DOM-Struktur von den tests.
Beim laufen Winkelmesser bekomme ich eine Fehlermeldung sagt mir, dass meine "meine Seite" Objekt ist nicht eine Funktion.
Hier ist das page-Objekt als Typoskript Klasse: home.po.spec.ts
module Tests.e2e.Home {
export class HomePage {
emailInput;
constructor() {
this.emailInput = element(by.model('email'));
}
get(): void {
browser.get('https://localhost:44300');
}
get email(): string {
return this.emailInput.getText();
}
set email(value: string) {
this.emailInput.sendKeys(value);
}
}
}
Dies ist mein test: home.e2e.spec.ts
///<reference path="home.po.spec.ts"/>
module Tests.e2e.Home {
describe('home view', () => {
it('should mark invalid email in field', () => {
//arrange
var homePage = new HomePage();
homePage.get();
var emailField = homePage.emailInput;
//act
homePage.email = 'some invalid email';
//assert
expect(emailField.getAttribute('class')).toMatch('ng-invalid');
});
});
}
Schreibe ich die tests in Visual Studio 2013 und läuft Winkelmesser mit einem Schluck Aufgabe auf nodejs.
Hier ist die Fehlermeldung:
Starting selenium standalone server...
[launcher] Running 1 instances of WebDriver
Selenium standalone server started at http://192.168.5.153:23704/wd/hub
F
Failures:
1) home view should mark invalid email in field
Message:
TypeError: Home.HomePage is not a function
Stacktrace:
TypeError: Home.HomePage is not a function
at [object Object].<anonymous>(C:\Users\BSO\Documents\Git repos\app\Prese
ntation.Web\Tests\home.e2e.spec.ts:5:28)
at C: \Users\BSO\AppData\Roaming\npm\node_modules\protractor\node_modules\jas
minewd\index.js:94:14
at goog.async.run.processWorkQueue(C:\Users\BSO\AppData\Roaming\npm\node_mo
dules\protractor\node_modules\selenium - webdriver\lib\goog\async\run.js:130:15)
From: Task: Asynchronous test function: it()
at[object Object].<anonymous> (C:\Users\BSO\AppData\Roaming\npm\node_module
s\protractor\node_modules\jasminewd\index.js:93:33)
at[object Object].<anonymous> (C:\Users\BSO\AppData\Roaming\npm\node_module
s\protractor\node_modules\minijasminenode\lib\async - callback.js:45:37)
at[object Object].jasmine.Block.execute(C:\Users\BSO\AppData\Roaming\npm\n
ode_modules\protractor\node_modules\minijasminenode\lib\jasmine - 1.3.1.js:1174:17
)
at[object Object].jasmine.Queue.next_(C:\Users\BSO\AppData\Roaming\npm\nod
e_modules\protractor\node_modules\minijasminenode\lib\jasmine - 1.3.1.js:2209:31)
at[object Object]._onTimeout(C:\Users\BSO\AppData\Roaming\npm\node_modules
\protractor\node_modules\minijasminenode\lib\jasmine - 1.3.1.js:2199:18)
Error
at[object Object].<anonymous> (C:\Users\BSO\Documents\Git repos\app\Prese
ntation.Web\Tests\home.e2e.spec.ts:3:9)
at[object Object].jasmine.Env.describe_(C:\Users\BSO\AppData\Roaming\npm\n
ode_modules\protractor\node_modules\minijasminenode\lib\jasmine - 1.3.1.js:913:21)
at[object Object].jasmine.Env.describe(C:\Users\BSO\AppData\Roaming\npm\no
de_modules\protractor\node_modules\minijasminenode\lib\jasmine - 1.3.1.js:898:15)
at describe (C:\Users\BSO\AppData\Roaming\npm\node_modules\protractor\node_m
odules\minijasminenode\lib\jasmine - 1.3.1.js:658:27)
at e2e.Home.e2e.Home(C:\Users\BSO\Documents\Git repos\app\Presentation.We
b\Tests\home.e2e.spec.ts:2:5)
at Tests.e2e.Tests.e2e(C:\Users\BSO\Documents\Git repos\app\Presentation.
Web\Tests\home.e2e.spec.ts:16:2)
at Tests (C:\Users\BSO\Documents\Git repos\app\Presentation.Web\Tests\home
.e2e.spec.ts:16:2)
at Object.<anonymous>(C:\Users\BSO\Documents\Git repos\app\Presentation.W
eb\Tests\home.e2e.spec.ts:16:2)
Finished in 0.031 seconds
1 test, 1 assertion, 1 failure
Shutting down selenium standalone server.
[launcher] 0 instance(s) of WebDriver still running
[launcher] chrome #1 failed 1 test(s)
[launcher] overall: 1 failed spec(s)
[launcher] Process exited with error code 1
Kann mir jemand helfen mit diesem? Wie kann ich die Datei test Referenz
Lösung
Die Lösung ist nicht zu verwenden, interne Module im Typoskript.
Durch die Umstellung auf commonjs-Modul-system und die Nutzung der Niederschrift import something = require('path to someting')
es funktioniert wie erwartet.
Hier ist ein Beispiel für das setup.
Das page-Objekt home.po.spec.ts
:
class HomePage {
getPage(): void {
browser.get('https://localhost:44300/');
}
nameElement = element(by.id('name'));
get nameInput(): string {
var value: string;
this.nameElement.getAttribute('value').then(v => value = v);
return value;
}
set nameInput(value: string) {
this.nameElement.sendKeys(value);
}
}
export = HomePage;
Und der test spec home.e2e.spec.ts
:
import HomePo = require('./home.po.spec');
describe('home view', () => {
it('name input should be writeable', () => {
//arrange
var pageObject: HomePo = new ItProjectEditPo();
pageObject.getPage();
//act
pageObject.nameInput = 'SomeName';
//assert
expect(pageObject.nameInput).toBe('SomeName');
});
});
Einige Hinweise auf die Lösung.
Das page-Objekt auflösen muss das element getAttribute Versprechen, wenn es mit Typoskript Eigenschaften, getAttribute gibt ein Versprechen, aber sendKeys nimmt eine Zeichenfolge.
TypeScript-Module Dokumentation ist hier. Es hat einige Zeit gedauert, um es zu verstehen, aber es macht Sinn jetzt. Durch dieses Modul-Struktur ist es auch möglich, zu importieren nodejs Pakete.
home.e2e.spec.ts
nicht, müssen Sie etwas entlang der Linien von import {HomePage} from './home.po.spec';
?
InformationsquelleAutor Bjørn Sørensen | 2015-11-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie wahrscheinlich gesagt, Winkelmesser, um alle Ihre
*.spec.ts
Dateien, so Winkelmesser mit einbezogen, indem die Reihenfolge des abc. Dies bedeutet, dass die Dateihome.e2e.spec.ts
aufgenommen werden, bevor diehome.po.spec.ts
Datei.Haben Sie zwei Möglichkeiten:
import
auf das page-Objekt (Anstelle von Referenz-Dateien)Gibt es ein weiteres Problem, dass Sie nicht sehen: Sie initialisiert die
emailInput
im Konstruktor sondern alsget
nachdem es initialisiert wurde...InformationsquelleAutor gilamran