| *** Settings *** | 
 | Documentation  This is a resource file containing user-defined keywords for new Vue based OpenBMC GUI. | 
 |  | 
 | Library        XvfbRobot | 
 | Library        SeleniumLibrary | 
 | Library        SSHLibrary  30 Seconds | 
 | Resource       ../../lib/state_manager.robot | 
 | Variables      ../data/gui_variables.py | 
 |  | 
 |  | 
 | *** Variables *** | 
 | ${obmc_gui_url}              https://${OPENBMC_HOST} | 
 | ${xpath_power_page}          //*[@data-test-id='appHeader-container-power'] | 
 | ${xpath_power_shutdown}      //*[@data-test-id='serverPowerOperations-button-shutDown'] | 
 | ${xpath_power_power_on}      //*[@data-test-id='serverPowerOperations-button-powerOn'] | 
 | ${xpath_power_reboot}        //*[@data-test-id='serverPowerOperations-button-reboot'] | 
 | ${xpath_confirm}             //button[contains(text(),'Confirm')] | 
 |  | 
 | # Default GUI browser and mode is set to "Firefox" and "headless" | 
 | # respectively here. | 
 | ${GUI_BROWSER}               ff | 
 | ${GUI_MODE}                  headless | 
 |  | 
 |  | 
 | *** Keywords *** | 
 |  | 
 | Open Browser With URL | 
 |     [Documentation]  Open browser with specified URL and returns browser id. | 
 |     [Arguments]  ${URL}  ${browser}=ff  ${mode}=${GUI_MODE} | 
 |  | 
 |     # Description of argument(s): | 
 |     # URL      Openbmc GUI URL to be open | 
 |     #          (e.g. https://openbmc-test.mybluemix.net/#/login). | 
 |     # browser  Browser used to open above URL | 
 |     #          (e.g. gc for google chrome, ff for firefox). | 
 |     # mode     Browser opening mode(e.g. headless, header). | 
 |  | 
 |     ${browser_ID}=  Run Keyword If  '${mode}' == 'headless' | 
 |     ...  Launch Headless Browser  ${URL}  ${browser} | 
 |     ...  ELSE  Open Browser  ${URL}  ${browser} | 
 |  | 
 |     [Return]  ${browser_ID} | 
 |  | 
 |  | 
 | Launch Header Browser | 
 |     [Documentation]  Open the browser with the URL and | 
 |     ...              login on windows platform. | 
 |     [Arguments]  ${browser_type}=${GUI_BROWSER} | 
 |  | 
 |     # Description of argument(s): | 
 |     # browser_type  Type of browser (e.g. "firefox", "chrome", etc.). | 
 |  | 
 |     ${BROWSER_ID}=  Open Browser  ${obmc_gui_url}  ${browser_type} | 
 |     Maximize Browser Window | 
 |     Set Global Variable  ${BROWSER_ID} | 
 |  | 
 |  | 
 | Launch Headless Browser | 
 |     [Documentation]  Launch headless browser. | 
 |     [Arguments]  ${URL}=${obmc_gui_url}  ${browser}=${GUI_BROWSER} | 
 |  | 
 |     # Description of argument(s): | 
 |     # URL      Openbmc GUI URL to be open | 
 |     #          (e.g. https://openbmc-test.mybluemix.net/#/login). | 
 |     # browser  Browser to open given URL in headless way | 
 |     #          (e.g. gc for google chrome, ff for firefox). | 
 |  | 
 |     Start Virtual Display | 
 |     ${browser_ID}=  Open Browser  ${URL} | 
 |     Set Window Size  1920  1080 | 
 |  | 
 |     [Return]  ${browser_ID} | 
 |  | 
 |  | 
 | Launch Browser And Login GUI | 
 |     [Documentation]  Launch browser and login to OpenBMC GUI, retry 2 attempts | 
 |     ...              in 1 minute time. | 
 |  | 
 |     Wait Until Keyword Succeeds  130 sec   65 sec  Retry Browser Login Attempts | 
 |  | 
 |  | 
 | Retry Browser Login Attempts | 
 |     [Documentation]  Launch browser and login to OpenBMC GUI. | 
 |  | 
 |     Open Browser With URL  ${obmc_gui_url} | 
 |     Login GUI  ${OPENBMC_USERNAME}  ${OPENBMC_PASSWORD} | 
 |  | 
 |  | 
 | Login GUI | 
 |     [Documentation]  Login to OpenBMC GUI. | 
 |     [Arguments]  ${username}=${OPENBMC_USERNAME}  ${password}=${OPENBMC_PASSWORD} | 
 |  | 
 |     # Description of argument(s): | 
 |     # username  The username to be used for login. | 
 |     # password  The password to be used for login. | 
 |  | 
 |     Go To  ${obmc_gui_url} | 
 |     Wait Until Element Is Enabled  ${xpath_login_username_input} | 
 |     Input Text  ${xpath_login_username_input}  ${username} | 
 |     Input Password  ${xpath_login_password_input}  ${password} | 
 |     Wait Until Element Is Enabled  ${xpath_login_button} | 
 |     Click Element  ${xpath_login_button} | 
 |     Wait Until Page Contains  Overview  timeout=60s | 
 |  | 
 |  | 
 | Logout GUI | 
 |     [Documentation]  Logout of OpenBMC GUI. | 
 |  | 
 |     Click Element  ${xpath_root_button_menu} | 
 |     Click Element  ${xpath_logout_button} | 
 |     Wait Until Page Contains Element  ${xpath_login_button} | 
 |  | 
 |  | 
 | Generate Test Error Log | 
 |     [Documentation]  Generate test error log. | 
 |  | 
 |     BMC Execute Command  ${CMD_UNRECOVERABLE_ERROR} | 
 |  | 
 |  | 
 | Set Timezone In Profile Settings Page | 
 |     [Documentation]  Set the given timezone in profile settings page. | 
 |     [Arguments]  ${timezone}=Default | 
 |  | 
 |     # Description of argument(s): | 
 |     # timezone  Timezone to select (eg. Default or Browser_offset). | 
 |  | 
 |     Wait Until Page Contains Element  ${xpath_root_button_menu} | 
 |     Click Element  ${xpath_root_button_menu} | 
 |     Click Element  ${xpath_profile_settings} | 
 |     Click Element At Coordinates  ${xpath_default_UTC}  0  0 | 
 |     Click Element  ${xpath_profile_save_button} | 
 |  | 
 |  | 
 | Refresh GUI | 
 |     [Documentation]  Refresh GUI via refresh button in header. | 
 |  | 
 |     Click Element  ${xpath_refresh_button} | 
 |     # Added delay for page to load fully after refresh. | 
 |     Sleep  5s | 
 |  | 
 |  | 
 | Refresh GUI And Verify Element Value | 
 |     [Documentation]  Refresh GUI using refresh button and verify that given element contains expected value. | 
 |     [Arguments]  ${element}  ${expected_value} | 
 |  | 
 |     # Description of argument(s): | 
 |     # element         Element whose value need to be checked. | 
 |     # expected_value  Expected value of for the given element. | 
 |  | 
 |     # Refresh GUI. | 
 |  | 
 |     Click Element  ${xpath_refresh_button} | 
 |  | 
 |     # Check element value and verify that it contains expected value. | 
 |     ${element_value}=  Get Text  ${element} | 
 |     Log  ${element_value} | 
 |     Should Contain  ${element_value}  ${expected_value} | 
 |  | 
 |  | 
 | Reboot BMC via GUI | 
 |     [Documentation]  Reboot BMC via GUI. | 
 |  | 
 |     Click Element  ${xpath_operations_menu} | 
 |     Click Element  ${xpath_reboot_bmc_sub_menu} | 
 |     Click Button  ${xpath_reboot_bmc_button} | 
 |     Wait Until Keyword Succeeds  30 sec  10 sec  Click Button  ${xpath_confirm_bmc_reboot} | 
 |     Wait Until Keyword Succeeds  2 min  10 sec  Is BMC Unpingable | 
 |     Wait For Host To Ping  ${OPENBMC_HOST}  1 min | 
 |  | 
 |  | 
 | Add DNS Servers And Verify | 
 |     [Documentation]  Login to GUI Network page,add DNS server on BMC | 
 |     ...  and verify it via BMC CLI. | 
 |     [Arguments]  ${dns_server}   ${expected_status}=Valid format | 
 |  | 
 |     # Description of the argument(s): | 
 |     # dns_server           A list of static name server IPs to be | 
 |     #                      configured on the BMC. | 
 |     # expected_status      Expected status while adding DNS server address | 
 |     #                      (e.g. Invalid format / Field required). | 
 |  | 
 |     Wait Until Page Contains Element  ${xpath_add_dns_ip_address_button}  timeout=15sec | 
 |  | 
 |     Click Button  ${xpath_add_dns_ip_address_button} | 
 |     Input Text  ${xpath_input_static_dns}  ${dns_server} | 
 |     Click Button  ${xpath_add_button} | 
 |     Run keyword if  '${expected_status}' != 'Valid format' | 
 |     ...  Run keywords  Page Should Contain  ${expected_status}  AND  Return From Keyword | 
 |  | 
 |     Wait Until Page Contains Element  ${xpath_add_dns_ip_address_button}  timeout=10sec | 
 |     Wait Until Page Contains  ${dns_server}  timeout=40sec | 
 |  | 
 |     # Check if newly added DNS server is configured on BMC. | 
 |     ${cli_name_servers}=  CLI Get Nameservers | 
 |     ${cmd_status}=  Run Keyword And Return Status | 
 |     ...  List Should Contain Sub List  ${cli_name_servers}  ${dns_server} | 
 |  | 
 |  | 
 | Navigate To Server Power Page | 
 |     [Documentation]  Navigate To Server Power Page. | 
 |  | 
 |     Click Element  ${xpath_power_page} | 
 |     Wait Until Element Is Not Visible  ${xpath_progress_bar}  timeout=30 | 
 |  | 
 |  | 
 | Power Off Server | 
 |     [Documentation]  Powering off server. | 
 |  | 
 |     Navigate To Server Power Page | 
 |     ${present}=    Run Keyword And Return Status | 
 |     ...  Element Should Be Visible    ${xpath_power_shutdown} | 
 |     IF  ${present} | 
 |       Click Element  ${xpath_power_shutdown} | 
 |       Click Button  ${xpath_confirm} | 
 |       Wait Until Element Is Visible  ${xpath_power_poweron}  timeout=60 | 
 |     ELSE | 
 |       Log To console    Server is already powered Off. | 
 |     END | 
 |  | 
 |  | 
 | Power On Server | 
 |     [Documentation]  Powering on server. | 
 |  | 
 |     Navigate To Server Power Page | 
 |     ${present}=    Run Keyword And Return Status | 
 |     ...  Element Should Be Visible    ${xpath_power_power_on} | 
 |     IF  (${present}) | 
 |       Click Element  ${xpath_power_power_on} | 
 |       Wait Until Element Is Visible  ${xpath_power_shutdown}  timeout=60 | 
 |     ELSE | 
 |       Log To console    Server is already powered On. | 
 |     END | 
 |  | 
 |  | 
 | Reboot Server | 
 |     [Documentation]  Rebooting the server. | 
 |  | 
 |     Navigate To Server Power Page | 
 |     ${present}=    Run Keyword And Return Status | 
 |     ...  Element Should Be Visible    ${xpath_power_reboot} | 
 |     IF  ${present} | 
 |       Click Element  ${xpath_power_reboot} | 
 |       Wait Until Element Is Visible  ${xpath_confirm}  timeout=30 | 
 |       Click Button  ${xpath_confirm} | 
 |       Wait Until Element Is Visible  ${xpath_power_reboot}  timeout=60 | 
 |     ELSE | 
 |       Log To console    Server is already powered Off, can't reboot. | 
 |     END | 
 |  | 
 |  |