Skip to content

Commit bce6120

Browse files
musienkoyuriyvalorkin
authored andcommitted
feat(tests): added E2e saucelabs runner (#1272)
* fix(ci): let the karma pass * feat(protractor): add configuration for saucelabs e2e testing * fix tslint issue
1 parent 34e78c5 commit bce6120

9 files changed

+169
-296
lines changed

demo/e2e/data-provider/data-provider.po.ts

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { $, ElementFinder } from 'protractor';
1+
import { $ } from 'protractor';
2+
import { ElementFinder } from 'protractor/built/index';
23

34
const getTabHeaderAccordionPage = (tabNumber:number) => {
45
return $('accordion-group:nth-child(' + tabNumber + ') .panel-heading');
@@ -23,4 +24,32 @@ export class DataProvider {
2324
'5stTabHeaderText': {element: (): ElementFinder => getTabHeaderAccordionPage(5), actualResult: 'I can have markup, too!'},
2425
'5stTabContentText': {element: (): ElementFinder => getTabContentAccordionPage(5), actualResult: 'This is just some content to illustrate fancy headings.'}
2526
};
27+
28+
public static alertTableContains:any = {
29+
'Alert Danger text': {element: (): ElementFinder => $('[ng-reflect-type="danger"]>div'), actualResult: 'Oh snap! Change a few things up and try submitting again.'},
30+
'Alert Success text': {element: (): ElementFinder => $('[ng-reflect-type="success"]>div:not(span):not(.close)'), actualResult: 'Well done! You successfully read this important alert message.'},
31+
'Alert Dismissible text': {element: (): ElementFinder => $('[dismissontimeout="3000"]'), actualResult: 'This alert will dismiss in 3s'},
32+
'Alert Another text': {element: (): ElementFinder => $('[ng-reflect-type="warning"]:nth-child(2n)'), actualResult: 'Another alert!'}
33+
};
34+
public static modalsTableContains:any = {
35+
'Modal Large button text': {element: (): ElementFinder => $('.btn:nth-child(1)'), actualResult: 'Large modal'},
36+
'Modal Small button text': {element: (): ElementFinder => $('.btn:nth-child(3)'), actualResult: 'Small modal'},
37+
'Modal Child button text': {element: (): ElementFinder => $('.btn:nth-child(5)'), actualResult: 'Open child modal'},
38+
'Modal Static button text': {element: (): ElementFinder => $('.btn:nth-child(7)'), actualResult: 'Static modal'}
39+
};
40+
public static buttonsTableContains:any = {
41+
'Buttons Example header text': {element: (): ElementFinder => $('#example>h3'), actualResult: 'Example'},
42+
'Buttons Single Toggle header text': {element: (): ElementFinder => $('buttons-demo>h4:nth-child(1)'), actualResult: 'Single toggle'},
43+
'Buttons Single Toggle button text': {element: (): ElementFinder => $('buttons-demo>.btn'), actualResult: 'Single Toggle'},
44+
'Buttons Checkbox Left button text': {element: (): ElementFinder => $('.btn-group [btncheckbox]:nth-child(1)'), actualResult: 'Left'},
45+
'Buttons Radio Header text': {element: (): ElementFinder => $('buttons-demo :nth-child(8)'), actualResult: 'Radio & Uncheckable Radio'},
46+
'Buttons Checkbox Middle button text': {element: (): ElementFinder => $('.btn-group [btncheckbox]:nth-child(2)'), actualResult: 'Middle'},
47+
'Buttons Checkbox Right button text': {element: (): ElementFinder => $('.btn-group [btncheckbox]:nth-child(3)'), actualResult: 'Right'},
48+
'Buttons Radio Left button text': {element: (): ElementFinder => $('.btn-group:nth-child(2n) :nth-child(1)'), actualResult: 'Left'},
49+
'Buttons Radio Middle button text': {element: (): ElementFinder => $('.btn-group:nth-child(2n) :nth-child(2)'), actualResult: 'Middle'},
50+
'Buttons Radio Right button text': {element: (): ElementFinder => $('.btn-group:nth-child(2n) :nth-child(3)'), actualResult: 'Right'},
51+
'Buttons Uncheckable Left button text': {element: (): ElementFinder => $('.btn-group [uncheckable]:nth-child(1)'), actualResult: 'Left'},
52+
'Buttons Uncheckable Middle button text': {element: (): ElementFinder => $('.btn-group [uncheckable]:nth-child(2)'), actualResult: 'Middle'},
53+
'Buttons Uncheckable Right button text': {element: (): ElementFinder => $('.btn-group [uncheckable]:nth-child(3)'), actualResult: 'Right'}
54+
};
2655
}

demo/e2e/tests/accordion-demo.e2e-spec.ts

Lines changed: 9 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ const buttonAddItem = $('.panel-body .btn');
88
const checkboxOnlyOne = $('.checkbox .ng-valid');
99
const getItemsCount = $$('accordion-group:nth-child(4) .panel-body > div');
1010
const buttonArrow = $('.pull-right');
11+
const buttonGroup = $$('.panel-group accordion-group');
1112
let using = require('jasmine-data-provider');
12-
1313
const getTabHeader = (tabNumber:number) => {
1414
return $('accordion-group:nth-child(' + tabNumber + ') .panel-heading');
1515
};
@@ -19,62 +19,10 @@ const getTabContent = (tabNumber:number) => {
1919

2020
describe('Check the Accordion page in bootstrap 3', () => {
2121
beforeAll(() => {
22-
browser.get('#/accordion');
23-
leftPanelTests.checkLeftPanelMini();
24-
leftPanelTests.checkLeftPanelMaxi();
25-
});
26-
it('Close/open first tab by click', () => {
27-
getTabHeader(1).click();
28-
expect(getTabContent(1).isDisplayed()).toBe(false);
29-
getTabHeader(1).click();
30-
expect(getTabContent(1).isDisplayed()).toBe(true);
22+
browser.ignoreSynchronization = true;
23+
browser.get(`${browser.baseUrl}#/accordion`);
3124
});
32-
it('Open/close last tab with button Toggle Last Panel', () => {
33-
buttonToggleLastPanel.click();
34-
expect(getTabContent(5).isDisplayed()).toBe(true);
35-
expect(buttonArrow.getAttribute('class')).toContain('glyphicon-chevron-down');
36-
buttonToggleLastPanel.click();
37-
expect(getTabContent(5).isDisplayed()).toBe(false);
38-
expect(buttonArrow.getAttribute('class')).toContain('glyphicon-chevron-right');
39-
});
40-
it('Button Enable/Disable first panel is ON', () => {
41-
buttonEnableDisablePanel.click();
42-
getTabHeader(1).click();
43-
expect(getTabContent(1).isDisplayed()).toBe(false);
44-
});
45-
it('Button Enable/Disable first panel is OFF', () => {
46-
buttonEnableDisablePanel.click();
47-
getTabHeader(1).click();
48-
expect(getTabHeader(1).isDisplayed()).toBe(true);
49-
});
50-
it('Add items in 4th tab', () => {
51-
getTabHeader(4).click();
52-
expect(getItemsCount.count()).toBe(3);
53-
buttonAddItem.click();
54-
buttonAddItem.click();
55-
expect(getItemsCount.count()).toBe(5);
56-
});
57-
it('Open all tabs together', () => {
58-
checkboxOnlyOne.click();
59-
getTabHeader(1).click();
60-
getTabHeader(2).click();
61-
getTabHeader(3).click();
62-
getTabHeader(5).click();
63-
expect(getTabHeader(1).isDisplayed()).toBe(true);
64-
expect(getTabHeader(2).isDisplayed()).toBe(true);
65-
expect(getTabHeader(3).isDisplayed()).toBe(true);
66-
expect(getTabHeader(4).isDisplayed()).toBe(true);
67-
expect(getTabHeader(5).isDisplayed()).toBe(true);
68-
});
69-
using (DataProvider.accordionTableContent, (data:any, description:string) => {
70-
it ('Check table texts: ' + description, () => {
71-
expect(data.element().getText()).toBe(data.actualResult);
72-
});
73-
});
74-
});
75-
describe('Check the Accordion page in bootstrap 4', () => {
76-
beforeAll(() => {
77-
browser.get('index-bs4.html#/accordion');
25+
afterAll(() => {
7826
leftPanelTests.checkLeftPanelMini();
7927
leftPanelTests.checkLeftPanelMaxi();
8028
});
@@ -103,23 +51,18 @@ describe('Check the Accordion page in bootstrap 4', () => {
10351
expect(getTabHeader(1).isDisplayed()).toBe(true);
10452
});
10553
it('Add items in 4th tab', () => {
54+
browser.sleep(1000);
10655
getTabHeader(4).click();
10756
expect(getItemsCount.count()).toBe(3);
10857
buttonAddItem.click();
10958
buttonAddItem.click();
11059
expect(getItemsCount.count()).toBe(5);
11160
});
112-
it('Open all tabs together', () => {
61+
it('Open all tabs together', (): void => {
11362
checkboxOnlyOne.click();
114-
getTabHeader(1).click();
115-
getTabHeader(2).click();
116-
getTabHeader(3).click();
117-
getTabHeader(5).click();
118-
expect(getTabHeader(1).isDisplayed()).toBe(true);
119-
expect(getTabHeader(2).isDisplayed()).toBe(true);
120-
expect(getTabHeader(3).isDisplayed()).toBe(true);
121-
expect(getTabHeader(4).isDisplayed()).toBe(true);
122-
expect(getTabHeader(5).isDisplayed()).toBe(true);
63+
buttonGroup.each(function (element: any): void {
64+
element.click();
65+
});
12366
});
12467
using (DataProvider.accordionTableContent, (data:any, description:string) => {
12568
it ('Check table texts: ' + description, () => {

demo/e2e/tests/alert-demo.e2e-spec.ts

Lines changed: 16 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,24 @@
11
import { $, $$, browser } from 'protractor';
2+
import { DataProvider } from '../data-provider/data-provider.po';
23
import { leftPanelTests } from './leftPanelTests.po';
34

5+
let using = require('jasmine-data-provider');
46
const buttonAddAlert = $('alert-demo .btn');
5-
const alertWarning = $('.alert.alert-warning');
7+
const alertWarning = $('[ng-reflect-ng-class="alert-warning"]');
68
const getAlertCount = $$('alert > div');
7-
const getCloseButton = (tabNumber:any) => {
9+
const getCloseButton = (tabNumber:number) => {
810
return 'alert-demo alert:nth-child(' + tabNumber + ') .close';
911
};
1012

1113
describe('Alerts page test on bootstrap 3', () => {
1214
beforeAll(() => {
13-
browser.get('#/alerts');
15+
browser.get(`${browser.baseUrl}#/alerts`);
1416
browser.ignoreSynchronization = true;
17+
});
18+
afterAll(() => {
1519
leftPanelTests.checkLeftPanelMini();
1620
leftPanelTests.checkLeftPanelMaxi();
1721
});
18-
beforeEach(() => {
19-
browser.refresh();
20-
});
21-
it('Warning alert is displayed', () => {
22-
expect(alertWarning.isDisplayed()).toBe(true);
23-
});
24-
it('Warning alert is disappear', () => {
25-
browser.sleep(5000);
26-
expect(alertWarning.isPresent()).toBe(false);
27-
});
2822
it('Default warnings count', () => {
2923
expect(getAlertCount.count()).toBe(3);
3024
});
@@ -33,50 +27,24 @@ describe('Alerts page test on bootstrap 3', () => {
3327
buttonAddAlert.click();
3428
expect(getAlertCount.count()).toBe(5);
3529
});
36-
it('User can delete danger and success alerts', () => {
37-
$(getCloseButton(2)).click();
38-
$(getCloseButton(1)).click();
39-
expect(getAlertCount.count()).toBe(1);
40-
});
41-
it('User can delete added alerts', () => {
42-
buttonAddAlert.click();
43-
$(getCloseButton(3)).click();
44-
expect(getAlertCount.count()).toBe(3);
45-
});
46-
});
47-
describe('Alerts page test on bootstrap 4', () => {
48-
beforeAll(() => {
49-
browser.get('index-bs4.html#/alerts');
50-
browser.ignoreSynchronization = true;
51-
leftPanelTests.checkLeftPanelMini();
52-
leftPanelTests.checkLeftPanelMaxi();
53-
});
54-
beforeEach(() => {
55-
browser.refresh();
56-
});
57-
it('Warning alert is displayed', () => {
58-
expect(alertWarning.isDisplayed()).toBe(true);
30+
using (DataProvider.alertTableContains, (data:any, description:string) => {
31+
it ('Check tab texts: ' + description, () => {
32+
expect(data.element().getText()).toContain(data.actualResult);
33+
});
5934
});
6035
it('Warning alert is disappear', () => {
61-
browser.sleep(5000);
36+
browser.sleep(3000);
6237
expect(alertWarning.isPresent()).toBe(false);
6338
});
64-
it('Default warnings count', () => {
65-
expect(getAlertCount.count()).toBe(3);
66-
});
67-
it('Adding warnings', () => {
68-
buttonAddAlert.click();
69-
buttonAddAlert.click();
70-
expect(getAlertCount.count()).toBe(5);
71-
});
7239
it('User can delete danger and success alerts', () => {
73-
$(getCloseButton(1)).click();
40+
$(getCloseButton(3)).click();
41+
$(getCloseButton(2)).click();
7442
$(getCloseButton(1)).click();
7543
expect(getAlertCount.count()).toBe(1);
7644
});
7745
it('User can delete added alerts', () => {
7846
buttonAddAlert.click();
79-
$(getCloseButton(3)).click();
80-
expect(getAlertCount.count()).toBe(3);
47+
$(getCloseButton(1)).click();
48+
expect(getAlertCount.count()).toBe(1);
8149
});
8250
});

0 commit comments

Comments
 (0)