UNPKG

jspcom

Version:

TypeScript and JavaScript page component object framework for Selenium

105 lines 3.79 kB
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