import { $, expect } from '@wdio/globals'
export class CalcPage {
constructor() {
this.title = 'Calculator';
}
open() {
return browser.url('http://localhost:8000')
}
get doc() { return browser }
get display() { return $('#display') }
get button_1() { return $('#digit_1') }
get button_2() { return $('#digit_2') }
get button_3() { return $('#digit_3') }
get button_4() { return $('#digit_4') }
get button_5() { return $('#digit_5') }
get button_6() { return $('#digit_6') }
get button_7() { return $('#digit_7') }
get button_8() { return $('#digit_8') }
get button_9() { return $('#digit_9') }
get button_0() { return $('#digit_0') }
get operation_add() { return $('#operator_add') }
get operation_multiply() { return $('#operator_multiply') }
get operation_subtract() { return $('#operator_subtract') }
get operation_divide() { return $('#operator_divide') }
get calculate() { return $('#calculate') }
get clear() { return $('#clear') }
}
const calcPage = new CalcPage();
describe('Calculator Testing', () => {
it('Should have a display, which shows zero', async () => {
await calcPage.open();
await expect(calcPage.display).toBePresent();
calcPage.display.value
await expect(calcPage.display).toHaveValue('0');
});
it('Should be able to add 1 + 2', async () => {
await calcPage.open();
await calcPage.button_1.click();
await calcPage.operation_add.click();
await calcPage.button_2.click();
await calcPage.calculate.click();
await expect(calcPage.display).toHaveValue('3');
});
it('Should be able to multiply 5 * 15', async () => {
await calcPage.open();
await calcPage.button_5.click();
await calcPage.operation_multiply.click();
await calcPage.button_1.click();
await calcPage.button_5.click();
await calcPage.calculate.click();
await expect(calcPage.display).toHaveValue('75');
});
it('Should be able to divide 300 by 25', async () => {
await calcPage.open();
await calcPage.button_3.click();
await calcPage.button_0.click();
await calcPage.button_0.click();
await calcPage.operation_divide.click();
await calcPage.button_2.click();
await calcPage.button_5.click();
await calcPage.calculate.click();
await expect(calcPage.display).toHaveValue('12');
});
it('Should support keyboard input', async () => {
await calcPage.open();
await calcPage.doc.keys('5');
await calcPage.doc.keys('0');
await calcPage.doc.keys('*');
await calcPage.doc.keys('1');
await calcPage.doc.keys('0');
await calcPage.doc.keys('Enter');
await expect(calcPage.display).toHaveValue('500');
});
it('Should be able to subtract 10 - 5', async () => {
await calcPage.open();
await calcPage.button_1.click();
await calcPage.button_0.click();
await calcPage.operation_subtract.click();
await calcPage.button_5.click();
await calcPage.calculate.click();
await expect(calcPage.display).toHaveValue('5');
});
it(`Should detect each digit being pressed`, async () => {
for (var x = 0; x < 9; x++) {
await calcPage.open();
await calcPage[`button_${x}`].click();
await expect(calcPage.display).toHaveValue(`${x}`);
}
});
it ('Should support three operations in a row', async () => {
await calcPage.open();
await calcPage.button_1.click();
await calcPage.operation_add.click();
await calcPage.button_2.click();
await calcPage.operation_multiply.click();
await calcPage.button_3.click();
await calcPage.calculate.click();
await expect(calcPage.display).toHaveValue('9');
});
it('The clear button should work', async () => {
await calcPage.open();
await calcPage.button_1.click();
await calcPage.operation_add.click();
await calcPage.button_2.click();
await calcPage.calculate.click();
await expect(calcPage.display).toHaveValue('3');
await calcPage.clear.click();
await expect(calcPage.display).toHaveValue('0');
});
});