xref: /openbmc/openbmc-test-automation/gui/lib/gui_resource.robot (revision 069b266e40a93fda3992c888062745b1ac920473)
1*** Settings ***
2Documentation  This is a resource file containing user-defined keywords for new Vue based OpenBMC GUI.
3
4Library        XvfbRobot
5Library        SeleniumLibrary
6Library        SSHLibrary  30 Seconds
7Resource       ../../lib/state_manager.robot
8Variables      ../data/gui_variables.py
9
10
11*** Variables ***
12${OPENBMC_GUI_URL}              https://${OPENBMC_HOST}:${HTTPS_PORT}
13${xpath_power_page}          //*[@data-test-id='appHeader-container-power']
14${xpath_power_shutdown}      //*[@data-test-id='serverPowerOperations-button-shutDown']
15${xpath_power_power_on}      //*[@data-test-id='serverPowerOperations-button-powerOn']
16${xpath_power_reboot}        //*[@data-test-id='serverPowerOperations-button-reboot']
17${xpath_confirm}             //button[contains(text(),'Confirm')]
18
19# Default GUI browser and mode is set to "Firefox" and "headless"
20# respectively here.
21${GUI_BROWSER}               ff
22${GUI_MODE}                  headless
23
24
25*** Keywords ***
26
27Open Browser With URL
28    [Documentation]  Open browser with specified URL and returns browser id.
29    [Arguments]  ${URL}  ${browser}=ff  ${mode}=${GUI_MODE}
30
31    # Description of argument(s):
32    # URL      Openbmc GUI URL to be open
33    #          (e.g. https://openbmc-test.mybluemix.net/#/login).
34    # browser  Browser used to open above URL
35    #          (e.g. gc for google chrome, ff for firefox).
36    # mode     Browser opening mode(e.g. headless, header).
37
38    IF  '${mode}' == 'headless'
39       ${browser_ID}=  Launch Headless Browser  ${URL}  ${browser}
40    ELSE
41       ${browser_ID}=  Open Browser  ${URL}  ${browser}
42    END
43    RETURN  ${browser_ID}
44
45
46Launch Header Browser
47    [Documentation]  Open the browser with the URL and
48    ...              login on windows platform.
49    [Arguments]  ${browser_type}=${GUI_BROWSER}
50
51    # Description of argument(s):
52    # browser_type  Type of browser (e.g. "firefox", "chrome", etc.).
53
54    ${BROWSER_ID}=  Open Browser  ${OPENBMC_GUI_URL}  ${browser_type}
55    Maximize Browser Window
56    Set Global Variable  ${BROWSER_ID}
57
58
59Launch Headless Browser
60    [Documentation]  Launch headless browser.
61    [Arguments]  ${URL}=${OPENBMC_GUI_URL}  ${browser}=${GUI_BROWSER}
62
63    # Description of argument(s):
64    # URL      Openbmc GUI URL to be open
65    #          (e.g. https://openbmc-test.mybluemix.net/#/login).
66    # browser  Browser to open given URL in headless way
67    #          (e.g. gc for google chrome, ff for firefox).
68
69    Start Virtual Display
70    ${browser_ID}=  Open Browser  ${URL}    ${browser}
71    Set Window Size  1920  1080
72
73    RETURN  ${browser_ID}
74
75
76Launch Browser And Login GUI
77    [Documentation]  Launch browser and login to OpenBMC GUI, retry 2 attempts
78    ...              in 1 minute time.
79
80    Wait Until Keyword Succeeds  195 sec   65 sec  Retry Browser Login Attempts
81
82
83Retry Browser Login Attempts
84    [Documentation]  Launch browser and login to OpenBMC GUI.
85
86    Open Browser With URL  ${OPENBMC_GUI_URL}
87    Login GUI  ${OPENBMC_USERNAME}  ${OPENBMC_PASSWORD}
88
89
90Login GUI
91    [Documentation]  Login to OpenBMC GUI.
92    [Arguments]  ${username}=${OPENBMC_USERNAME}  ${password}=${OPENBMC_PASSWORD}
93
94    # Description of argument(s):
95    # username  The username to be used for login.
96    # password  The password to be used for login.
97
98    Go To  ${OPENBMC_GUI_URL}
99    Wait Until Element Is Enabled  ${xpath_login_username_input}
100    Input Text  ${xpath_login_username_input}  ${username}
101    Input Password  ${xpath_login_password_input}  ${password}
102    Wait Until Element Is Enabled  ${xpath_login_button}
103    Click Element  ${xpath_login_button}
104    Wait Until Page Contains  Overview  timeout=60s
105    Wait Until Element Is Not Visible
106    ...  ${xpath_page_loading_progress_bar}  timeout=120s
107
108
109Launch Browser And Login GUI With Given User
110    [Documentation]  Launch browser and login eBMC with specified user
111    ...  credentials through GUI.
112    [Arguments]  ${user_name}  ${user_password}
113
114    # Description of argument(s):
115    # user_name        User name to login to eBMC.
116    # user_password    User password to login to eBMC.
117
118    Open Browser With URL  ${OPENBMC_GUI_URL}
119    LOGIN GUI  ${user_name}  ${user_password}
120
121
122Logout GUI
123    [Documentation]  Logout of OpenBMC GUI.
124
125    Click Element  ${xpath_root_button_menu}
126    Click Element  ${xpath_logout_button}
127    Wait Until Page Contains Element  ${xpath_login_button}
128
129
130Generate Test Error Log
131    [Documentation]  Generate test error log.
132
133    BMC Execute Command  ${CMD_UNRECOVERABLE_ERROR}
134
135
136Set Timezone In Profile Settings Page
137    [Documentation]  Set the given timezone in profile settings page.
138    [Arguments]  ${timezone}=Default
139
140    # Description of argument(s):
141    # timezone  Timezone to select (eg. Default or Browser_offset).
142
143    Wait Until Page Contains Element  ${xpath_root_button_menu}
144    Click Element  ${xpath_root_button_menu}
145    Click Element  ${xpath_profile_settings}
146    Click Element At Coordinates  ${xpath_default_UTC}  0  0
147    Click Element  ${xpath_profile_save_button}
148
149
150Refresh GUI
151    [Documentation]  Refresh GUI via refresh button in header.
152
153    Click Element  ${xpath_refresh_button}
154    # Waiting for  page to load fully after refresh.
155    Wait Until Element Is Not Visible   ${xpath_page_loading_progress_bar}  timeout=120s
156
157
158Refresh GUI And Verify Element Value
159    [Documentation]  Refresh GUI using refresh button and verify that given element contains expected value.
160    [Arguments]  ${element}  ${expected_value}
161
162    # Description of argument(s):
163    # element         Element whose value need to be checked.
164    # expected_value  Expected value of for the given element.
165
166    # Refresh GUI.
167
168    Click Element  ${xpath_refresh_button}
169
170    # Check element value and verify that it contains expected value.
171    ${element_value}=  Get Text  ${element}
172    Log  ${element_value}
173    Should Contain  ${element_value}  ${expected_value}
174
175
176Reboot BMC via GUI
177    [Documentation]  Reboot BMC via GUI.
178
179    Click Element  ${xpath_operations_menu}
180    Click Element  ${xpath_reboot_bmc_sub_menu}
181    Click Button  ${xpath_reboot_bmc_button}
182    Wait Until Keyword Succeeds  30 sec  10 sec  Click Button  ${xpath_confirm_bmc_reboot}
183    Wait Until Keyword Succeeds  2 min  10 sec  Is BMC Unpingable
184    Wait For Host To Ping  ${OPENBMC_HOST}  1 min
185
186
187Add DNS Servers And Verify
188    [Documentation]  Login to GUI Network page,add DNS server on BMC
189    ...  and verify it via BMC CLI.
190    [Arguments]  ${dns_server}   ${expected_status}=Valid format
191
192    # Description of the argument(s):
193    # dns_server           A list of static name server IPs to be
194    #                      configured on the BMC.
195    # expected_status      Expected status while adding DNS server address
196    #                      (e.g. Invalid format / Field required).
197
198    Wait Until Page Contains Element  ${xpath_add_dns_ip_address_button}  timeout=15sec
199
200    Click Button  ${xpath_add_dns_ip_address_button}
201    Input Text  ${xpath_input_static_dns}  ${dns_server}
202    Click Button  ${xpath_add_button}
203    IF  '${expected_status}' != 'Valid format'
204        Page Should Contain  ${expected_status}  AND  Return From Keyword
205    END
206
207    Wait Until Page Contains Element  ${xpath_add_dns_ip_address_button}  timeout=10sec
208    Wait Until Page Contains  ${dns_server}  timeout=40sec
209
210    # Check if newly added DNS server is configured on BMC.
211    ${cli_name_servers}=  CLI Get Nameservers
212    ${cmd_status}=  Run Keyword And Return Status
213    ...  List Should Contain Sub List  ${cli_name_servers}  ${dns_server}
214    IF  '${expected_status}' == '${HTTP_OK}'
215       Should Be True  ${cmd_status} == ${True}
216    ELSE
217       Should Not Be True  ${cmd_status}
218    END
219
220
221Navigate To Server Power Page
222    [Documentation]  Navigate To Server Power Page.
223
224    Click Element  ${xpath_power_page}
225    Wait Until Element Is Not Visible  {xpath_page_loading_progress_bar}  timeout=30
226
227
228Power Off Server
229    [Documentation]  Powering off server.
230
231    Navigate To Server Power Page
232    ${present}=    Run Keyword And Return Status
233    ...  Element Should Be Visible    ${xpath_power_shutdown}
234    IF  ${present}
235      Click Element  ${xpath_power_shutdown}
236      Click Button  ${xpath_confirm}
237      Wait Until Element Is Visible  ${xpath_power_poweron}  timeout=60
238      Click Element  ${xpath_close_information_message}
239    ELSE
240      Log To console    Server is already powered Off.
241    END
242
243
244Power On Server
245    [Documentation]  Powering on server.
246
247    Navigate To Server Power Page
248    ${present}=    Run Keyword And Return Status
249    ...  Element Should Be Visible    ${xpath_power_power_on}
250    IF  (${present})
251      Click Element  ${xpath_power_power_on}
252      Wait Until Element Is Visible  ${xpath_power_shutdown}  timeout=60
253      Click Element  ${xpath_close_information_message}
254    ELSE
255      Log To console    Server is already powered On.
256    END
257
258
259Reboot Server
260    [Documentation]  Rebooting the server.
261
262    Navigate To Server Power Page
263    ${present}=    Run Keyword And Return Status
264    ...  Element Should Be Visible    ${xpath_power_reboot}
265    IF  ${present}
266      Click Element  ${xpath_power_reboot}
267      Wait Until Element Is Visible  ${xpath_confirm}  timeout=30
268      Click Button  ${xpath_confirm}
269      Wait Until Element Is Visible  ${xpath_power_reboot}  timeout=60
270    ELSE
271      Log To console    Server is already powered Off, can't reboot.
272    END
273
274
275Verify Success Message On BMC GUI Page
276    [Documentation]  Perform actions on the GUI and verify that a success message is displayed.
277
278    Wait Until Element Is Visible   ${xpath_success_message}  timeout=30
279    Page Should Contain Element   ${xpath_success_message}
280    Wait Until Element Is Not Visible   ${xpath_success_message}  timeout=30
281
282
283Verify Error And Unauthorized Message On GUI
284    [Documentation]   Perform operations on GUI with Readonly user and
285    ...               verify Error and Unauthorized messages.
286
287    Wait Until Element Is Visible  ${xpath_error_popup}
288    Page Should Contain  Error
289    Page Should Contain  Unauthorized
290    Click Element  ${xpath_error_popup}
291    Click Element  ${xpath_unauthorized_popup}
292
293
294Create Readonly User And Login To GUI
295    [Documentation]   Logout current GUI sessions and Created Readonly_user via Redfish
296    ...               and Login BMC GUI with Readonly user
297
298    # Logout current GUI session.
299    Logout GUI
300
301    # Created readonly_user via redfish and login BMC GUI with readonly user to perfrom test.
302    Redfish.Login
303    Redfish Create User  readonly_user  ${OPENBMC_PASSWORD}  ReadOnly  ${True}
304    Login GUI  readonly_user  ${OPENBMC_PASSWORD}
305
306
307Delete Readonly User And Logout Current GUI Session
308    [Documentation]  Logout current GUI session and delete Readonly user,
309    ...              Perform Login GUI with default user and password.
310
311    # Delete Read-only user and Logout current GUI session.
312    Logout GUI
313    Redfish.Delete  /redfish/v1/AccountService/Accounts/readonly_user
314    Close Browser
315
316    # Login BMC GUI with default user.
317    Launch Browser And Login GUI
318