jspcom
Version:
TypeScript and JavaScript page component object framework for Selenium
105 lines • 3.79 kB
JavaScript
import { __awaiter, __decorate, __metadata } from "tslib";
import { expect } from 'chai';
import { By, WebDriver, WebElement } from 'selenium-webdriver';
import Sinon from 'sinon';
import { Component, Page, PageComponent } from './index.js';
class Password extends PageComponent {
constructor() {
super(...arguments);
this.locator = By.id('password');
}
}
class Username extends PageComponent {
constructor() {
super(...arguments);
this.locator = By.id('username');
}
}
export class LoginForm extends PageComponent {
constructor() {
super(...arguments);
this.locator = By.id('loginForm');
}
fillOut(username, password) {
return __awaiter(this, void 0, void 0, function* () {
yield this.username.sendKeys(username);
yield this.password.sendKeys(password);
});
}
}
__decorate([
Component(),
__metadata("design:type", Username)
], LoginForm.prototype, "username", void 0);
__decorate([
Component(),
__metadata("design:type", Password)
], LoginForm.prototype, "password", void 0);
class LoginPage extends Page {
login(username, password) {
return __awaiter(this, void 0, void 0, function* () {
yield this.loginForm.fillOut(username, password);
yield this.loginForm.submit();
});
}
}
__decorate([
Component(),
__metadata("design:type", LoginForm)
], LoginPage.prototype, "loginForm", void 0);
describe('Page', () => {
const username = "myusername";
const password = "mypassword";
let sandbox;
let driverStub;
let usernameElementStub;
let passwordElementStub;
let formElementStub;
let page;
before(() => {
sandbox = Sinon.createSandbox();
usernameElementStub = sandbox.createStubInstance(WebElement, {
sendKeys: sandbox.stub().resolves(),
});
passwordElementStub = sandbox.createStubInstance(WebElement, {
sendKeys: sandbox.stub().resolves(),
});
formElementStub = sandbox.createStubInstance(WebElement, {
submit: sandbox.stub().resolves(),
});
driverStub = sandbox.createStubInstance(WebDriver, {
findElement: sandbox
.stub()
.onCall(0)
.resolves(usernameElementStub)
.onCall(1)
.resolves(passwordElementStub)
.onCall(2)
.resolves(formElementStub),
});
page = new LoginPage(driverStub);
});
after(() => {
sandbox.restore();
});
describe('Login method', () => __awaiter(void 0, void 0, void 0, function* () {
before(() => __awaiter(void 0, void 0, void 0, function* () {
yield page.login(username, password);
}));
it('tries to find 3 elements', () => __awaiter(void 0, void 0, void 0, function* () {
expect(driverStub.findElement.callCount).to.equal(3);
}));
it('tries to send keys to username field first', () => __awaiter(void 0, void 0, void 0, function* () {
expect(usernameElementStub.sendKeys.callCount).to.equal(1);
expect(usernameElementStub.sendKeys.calledWith(username)).to.be.true;
}));
it('tries to send keys to password field second', () => __awaiter(void 0, void 0, void 0, function* () {
expect(passwordElementStub.sendKeys.callCount).to.equal(1);
expect(passwordElementStub.sendKeys.calledWith(password)).to.be.true;
}));
it('tries to submit the form third', () => __awaiter(void 0, void 0, void 0, function* () {
expect(formElementStub.submit.callCount).to.equal(1);
}));
}));
});
//# sourceMappingURL=page.spec.js.map