@@ -3,141 +3,144 @@ import current_config from '../config';
33import { FilterTypes , GRAFANA_SELECTORS , GRAFANA_TEXT , GraphTypes } from '../constants' ;
44
55export class DashboardPage {
6- readonly page : Page ;
7-
8- constructor ( page : Page ) {
9- this . page = page ;
10- }
11-
12- async goto ( ) {
13- await this . page . goto ( current_config . grafanaUrl + 'dashboards' ) ;
14- }
15-
16- async addNewPanel ( ) {
17- await this . page . goto ( current_config . grafanaUrl + 'dashboard/new' ) ;
18- await this . page . locator ( GRAFANA_SELECTORS . DASHBOARD . ADD_NEW_DASHBOARD_BUTTON ) . click ( ) ;
19- }
20-
21- async saveDashboard ( ) {
22- const randInt = Math . floor ( Math . random ( ) * 1000 ) . toString ( ) ;
23-
24- await this . page . locator ( GRAFANA_SELECTORS . DASHBOARD . APPLY_CHANGES_AND_SAVE_BUTTON ) . click ( ) ;
25- await this . page . locator ( GRAFANA_SELECTORS . DASHBOARD . SAVE_DASHBOARD_TITLE ) . fill ( 'Test Dashboard ' + randInt ) ;
26- await this . page . locator ( GRAFANA_SELECTORS . DASHBOARD . SAVE_BUTTON ) . click ( ) ;
27-
28- await expect ( this . page . getByText ( GRAFANA_TEXT . DASHBOARD_SAVED ) ) . toBeVisible ( ) ;
29- }
30-
31- async selectDatasource ( edition : string ) {
32- await this . page . locator ( GRAFANA_SELECTORS . DASHBOARD . DATASOURCES_LIST )
33- . locator ( 'button' )
34- . filter ( { hasText : edition , } )
35- . click ( ) ;
36-
37- await expect ( this . page . getByText ( edition ) ) . toBeVisible ( ) ;
38- }
39-
40- async removeFilter ( filter : FilterTypes ) {
41- const selector = GRAFANA_SELECTORS . DASHBOARD . REMOVE_FILTER ( filter ) ;
42- await this . page . locator ( selector ) . click ( ) ;
43- await expect ( this . page . locator ( 'label' , { hasText : filter } ) ) . not . toBeVisible ( ) ;
44- }
45-
46- async addFilter ( filter : FilterTypes ) {
47- await this . page . locator ( GRAFANA_SELECTORS . DASHBOARD . FILTER_FIELD ) . click ( ) ;
48- await this . page . keyboard . type ( filter ) ;
49- await this . page . keyboard . press ( 'Enter' ) ;
50-
51- await expect ( this . page . locator ( 'label' , { hasText : filter } ) ) . toBeVisible ( ) ;
52- }
53-
54- async expectSpinners ( visible = true ) {
55- const cmp = this . page . locator ( GRAFANA_SELECTORS . SPINNER ) . first ( ) ;
56- if ( visible ) {
57- await expect ( cmp ) . toBeVisible ( ) ;
58- } else {
59- await expect ( cmp ) . not . toBeVisible ( ) ;
60- }
61- }
62-
63- async _addFilterBy ( fieldSelector : string , value : string , findByInputValue = false ) {
64- await this . page . locator ( fieldSelector ) . fill ( value ) ;
65- await this . expectSpinners ( false ) ;
66- await this . page . keyboard . press ( 'Enter' ) ;
67- await this . expectSpinners ( false ) ;
68-
69- await this . page . locator ( fieldSelector ) . blur ( ) ;
70-
71- if ( findByInputValue ) {
72- await expect ( this . page . locator ( fieldSelector ) . first ( ) ) . toHaveValue ( value ) ;
73- } else {
74- await expect ( this . page . locator ( `text="${ value } "` ) . first ( ) ) . toBeVisible ( ) ;
75- }
76- }
77-
78- async filterBySite ( site : string ) {
79- await this . _addFilterBy ( `input[id="${ GRAFANA_SELECTORS . DASHBOARD . SITE_FILTER_FIELD_ID } "]` , site ) ;
80- }
81-
82- async filterByHostname ( hostname : string ) {
83- await this . _addFilterBy ( `input[id="${ GRAFANA_SELECTORS . DASHBOARD . HOST_NAME_FILTER_FIELD_ID } "]` , hostname ) ;
84- }
85-
86- async filterByHostnameRegex ( hostnameRegex : string ) {
87- await this . _addFilterBy ( GRAFANA_SELECTORS . DASHBOARD . HOSTNAME_REGEX_FILTER_FIELD , hostnameRegex , true ) ;
88- }
89-
90- async filterByServiceRegex ( serviceRegex : string ) {
91- await this . _addFilterBy ( GRAFANA_SELECTORS . DASHBOARD . SERVICE_REGEX_FILTER_FIELD , serviceRegex , true ) ;
92- }
93-
94- async filterByService ( service : string ) {
95- await this . _addFilterBy ( `input[id="${ GRAFANA_SELECTORS . DASHBOARD . SERVICE_FILTER_FIELD_ID } "]` , service ) ;
96- }
97-
98- async filterByHostLabel ( hostLabel : string ) {
99- await this . _addFilterBy ( `input[id="${ GRAFANA_SELECTORS . DASHBOARD . HOST_LABEL_FILTER_FIELD_ID } "]` , hostLabel ) ;
100- }
101-
102- async selectPredefinedGraphType ( graphType : GraphTypes ) {
103- await this . _addFilterBy ( `input[id="${ GRAFANA_SELECTORS . DASHBOARD . PREDEFINED_GRAPH_FIELD_ID } "]` , graphType ) ;
104- }
105-
106- async selectSingleGraphType ( ) {
107- await this . page . locator ( `input[id="${ GRAFANA_SELECTORS . DASHBOARD . GRAPH_TYPE_ID } "]` ) . click ( )
108- await this . page . locator ( "span" , { hasText : "Single metric" } ) . click ( )
109- await expect ( this . page . locator ( `input[id="${ GRAFANA_SELECTORS . DASHBOARD . PREDEFINED_GRAPH_FIELD_ID } "]` ) ) . not . toBeVisible ( ) ;
110- }
111-
112- async selectSingleMetricGraphType ( graphType : string ) {
113- await this . _addFilterBy ( `input[id="${ GRAFANA_SELECTORS . DASHBOARD . SINGLE_METRIC_GRAPH_FIELD_ID } "]` , graphType ) ;
114- }
115-
116- async assertLegendElement ( legendElement : string | RegExp ) {
117- await expect ( this . page . locator ( GRAFANA_SELECTORS . DASHBOARD . PANEL_CONTENT_SELECTOR ) . filter ( { hasText : legendElement } ) ) . toBeVisible ( ) ;
118- }
119-
120- async assertHoverSelectorsOn ( nSelectors : number ) {
121- const locator = this . page . locator ( GRAFANA_SELECTORS . DASHBOARD . PANEL_HOVER )
122- const box = await locator . boundingBox ( ) ;
123- await this . page . mouse . click ( box ! . x + box ! . width - 20 , box ! . y + box ! . height / 6 ) ;
124-
125- await expect ( this . page . locator ( GRAFANA_SELECTORS . DASHBOARD . PLOTTED_HOVER_ON ) ) . toHaveCount ( nSelectors ) ;
126- await this . assertHoverSelectorsOff ( 0 ) ;
127- }
128-
129- async assertHoverSelectorsOff ( nSelectors : number ) {
130- await expect ( this . page . locator ( GRAFANA_SELECTORS . DASHBOARD . PLOTTED_HOVER_OFF ) ) . toHaveCount ( nSelectors ) ;
131- }
132-
133- async setCustomLabel ( label : string ) {
134- await this . _addFilterBy ( GRAFANA_SELECTORS . DASHBOARD . CUSTOM_LABEL_FIELD , label , true ) ;
135- }
136-
137- async refresGraph ( ) {
138- await this . page . locator ( GRAFANA_SELECTORS . DASHBOARD . REFRESH_GRAPH_BUTTON ) . click ( ) ;
139- }
140-
6+ readonly page : Page ;
1417
8+ constructor ( page : Page ) {
9+ this . page = page ;
10+ }
11+
12+ async goto ( ) {
13+ await this . page . goto ( current_config . grafanaUrl + 'dashboards' ) ;
14+ }
15+
16+ async addNewPanel ( ) {
17+ await this . page . goto ( current_config . grafanaUrl + 'dashboard/new' ) ;
18+ await this . page . locator ( GRAFANA_SELECTORS . DASHBOARD . ADD_NEW_DASHBOARD_BUTTON ) . click ( ) ;
19+ }
20+
21+ async saveDashboard ( ) {
22+ const randInt = Math . floor ( Math . random ( ) * 1000 ) . toString ( ) ;
23+
24+ await this . page . locator ( GRAFANA_SELECTORS . DASHBOARD . APPLY_CHANGES_AND_SAVE_BUTTON ) . click ( ) ;
25+ await this . page . locator ( GRAFANA_SELECTORS . DASHBOARD . SAVE_DASHBOARD_TITLE ) . fill ( 'Test Dashboard ' + randInt ) ;
26+ await this . page . locator ( GRAFANA_SELECTORS . DASHBOARD . SAVE_BUTTON ) . click ( ) ;
27+
28+ await expect ( this . page . getByText ( GRAFANA_TEXT . DASHBOARD_SAVED ) ) . toBeVisible ( ) ;
29+ }
30+
31+ async selectDatasource ( edition : string ) {
32+ await this . page
33+ . locator ( GRAFANA_SELECTORS . DASHBOARD . DATASOURCES_LIST )
34+ . locator ( 'button' )
35+ . filter ( { hasText : edition } )
36+ . click ( ) ;
37+
38+ await expect ( this . page . getByText ( edition ) ) . toBeVisible ( ) ;
39+ }
40+
41+ async removeFilter ( filter : FilterTypes ) {
42+ const selector = GRAFANA_SELECTORS . DASHBOARD . REMOVE_FILTER ( filter ) ;
43+ await this . page . locator ( selector ) . click ( ) ;
44+ await expect ( this . page . locator ( 'label' , { hasText : filter } ) ) . not . toBeVisible ( ) ;
45+ }
46+
47+ async addFilter ( filter : FilterTypes ) {
48+ await this . page . locator ( GRAFANA_SELECTORS . DASHBOARD . FILTER_FIELD ) . click ( ) ;
49+ await this . page . keyboard . type ( filter ) ;
50+ await this . page . keyboard . press ( 'Enter' ) ;
51+
52+ await expect ( this . page . locator ( 'label' , { hasText : filter } ) ) . toBeVisible ( ) ;
53+ }
54+
55+ async expectSpinners ( visible = true ) {
56+ const cmp = this . page . locator ( GRAFANA_SELECTORS . SPINNER ) . first ( ) ;
57+ if ( visible ) {
58+ await expect ( cmp ) . toBeVisible ( ) ;
59+ } else {
60+ await expect ( cmp ) . not . toBeVisible ( ) ;
61+ }
62+ }
63+
64+ async _addFilterBy ( fieldSelector : string , value : string , findByInputValue = false ) {
65+ await this . page . locator ( fieldSelector ) . fill ( value ) ;
66+ await this . expectSpinners ( false ) ;
67+ await this . page . keyboard . press ( 'Enter' ) ;
68+ await this . expectSpinners ( false ) ;
69+
70+ await this . page . locator ( fieldSelector ) . blur ( ) ;
71+
72+ if ( findByInputValue ) {
73+ await expect ( this . page . locator ( fieldSelector ) . first ( ) ) . toHaveValue ( value ) ;
74+ } else {
75+ await expect ( this . page . locator ( `text="${ value } "` ) . first ( ) ) . toBeVisible ( ) ;
76+ }
77+ }
78+
79+ async filterBySite ( site : string ) {
80+ await this . _addFilterBy ( `input[id="${ GRAFANA_SELECTORS . DASHBOARD . SITE_FILTER_FIELD_ID } "]` , site ) ;
81+ }
82+
83+ async filterByHostname ( hostname : string ) {
84+ await this . _addFilterBy ( `input[id="${ GRAFANA_SELECTORS . DASHBOARD . HOST_NAME_FILTER_FIELD_ID } "]` , hostname ) ;
85+ }
86+
87+ async filterByHostnameRegex ( hostnameRegex : string ) {
88+ await this . _addFilterBy ( GRAFANA_SELECTORS . DASHBOARD . HOSTNAME_REGEX_FILTER_FIELD , hostnameRegex , true ) ;
89+ }
90+
91+ async filterByServiceRegex ( serviceRegex : string ) {
92+ await this . _addFilterBy ( GRAFANA_SELECTORS . DASHBOARD . SERVICE_REGEX_FILTER_FIELD , serviceRegex , true ) ;
93+ }
94+
95+ async filterByService ( service : string ) {
96+ await this . _addFilterBy ( `input[id="${ GRAFANA_SELECTORS . DASHBOARD . SERVICE_FILTER_FIELD_ID } "]` , service ) ;
97+ }
98+
99+ async filterByHostLabel ( hostLabel : string ) {
100+ await this . _addFilterBy ( `input[id="${ GRAFANA_SELECTORS . DASHBOARD . HOST_LABEL_FILTER_FIELD_ID } "]` , hostLabel ) ;
101+ }
102+
103+ async selectPredefinedGraphType ( graphType : GraphTypes ) {
104+ await this . _addFilterBy ( `input[id="${ GRAFANA_SELECTORS . DASHBOARD . PREDEFINED_GRAPH_FIELD_ID } "]` , graphType ) ;
105+ }
106+
107+ async selectSingleGraphType ( ) {
108+ await this . page . locator ( `input[id="${ GRAFANA_SELECTORS . DASHBOARD . GRAPH_TYPE_ID } "]` ) . click ( ) ;
109+ await this . page . locator ( 'span' , { hasText : 'Single metric' } ) . click ( ) ;
110+ await expect (
111+ this . page . locator ( `input[id="${ GRAFANA_SELECTORS . DASHBOARD . PREDEFINED_GRAPH_FIELD_ID } "]` )
112+ ) . not . toBeVisible ( ) ;
113+ }
114+
115+ async selectSingleMetricGraphType ( graphType : string ) {
116+ await this . _addFilterBy ( `input[id="${ GRAFANA_SELECTORS . DASHBOARD . SINGLE_METRIC_GRAPH_FIELD_ID } "]` , graphType ) ;
117+ }
118+
119+ async assertLegendElement ( legendElement : string | RegExp ) {
120+ await expect (
121+ this . page . locator ( GRAFANA_SELECTORS . DASHBOARD . PANEL_CONTENT_SELECTOR ) . filter ( { hasText : legendElement } )
122+ ) . toBeVisible ( ) ;
123+ }
124+
125+ async assertHoverSelectorsOn ( nSelectors : number ) {
126+ const locator = this . page . locator ( GRAFANA_SELECTORS . DASHBOARD . PANEL_HOVER ) ;
127+ const box = await locator . boundingBox ( ) ;
128+ await this . page . mouse . click ( box ! . x + box ! . width - 20 , box ! . y + box ! . height / 6 ) ;
129+
130+ await expect ( this . page . locator ( GRAFANA_SELECTORS . DASHBOARD . PLOTTED_HOVER_ON ) ) . toHaveCount ( nSelectors ) ;
131+ await this . assertHoverSelectorsOff ( 0 ) ;
132+ }
133+
134+ async assertHoverSelectorsOff ( nSelectors : number ) {
135+ await expect ( this . page . locator ( GRAFANA_SELECTORS . DASHBOARD . PLOTTED_HOVER_OFF ) ) . toHaveCount ( nSelectors ) ;
136+ }
137+
138+ async setCustomLabel ( label : string ) {
139+ await this . _addFilterBy ( GRAFANA_SELECTORS . DASHBOARD . CUSTOM_LABEL_FIELD , label , true ) ;
140+ }
141+
142+ async refresGraph ( ) {
143+ await this . page . locator ( GRAFANA_SELECTORS . DASHBOARD . REFRESH_GRAPH_BUTTON ) . click ( ) ;
144+ }
142145}
143- export default DashboardPage
146+ export default DashboardPage ;
0 commit comments