*** Settings ***
Documentation    Keywords for ONAP Portal SDK management operations
Library         SeleniumLibrary
Library         OperatingSystem
Library         RequestsLibrary
Library         DateTime
Library         Collections
Library         String
Library         ONAPLibrary.Templating    WITH NAME    Templating

Resource        ../browser_setup.robot

*** Variables ***
#${PORTAL_URL}      http://portal.api.simpledemo.onap.org:8989
${PORTAL_URL}       ${GLOBAL_PORTAL_SERVER_PROTOCOL}://${GLOBAL_INJECTED_PORTAL_IP_ADDR}:${GLOBAL_PORTAL_SERVER_PORT}
${PORTAL_ENV}       /ONAPPORTAL
${PORTAL_LOGIN_URL}                ${PORTAL_URL}${PORTAL_ENV}/login.htm
${PORTAL_HOME_PAGE}        ${PORTAL_URL}${PORTAL_ENV}/applicationsHome
${PORTAL_MICRO_ENDPOINT}    ${PORTAL_URL}${PORTAL_ENV}/commonWidgets
${PORTAL_HOME_URL}                ${PORTAL_URL}${PORTAL_ENV}/applicationsHome
${PORTAL_HEALTH_CHECK_PATH}        ${PORTAL_ENV}/portalApi/healthCheck
${PORTAL_XDEMPAPP_REST_URL}        ${PORTAL_URL}/ONAPPORTALSDK/api/v2
${PORTAL_ASSETS_DIRECTORY}    ../../assets/widgets/
${GLOBAL_PORTAL_ADMIN_USER}		demo
${GLOBAL_PORTAL_ADMIN_PWD}		demo123456!
${RESOURCE_PATH}    ${PORTAL_URL}/auxapi/ticketevent
${portal_Template}    portal/portal.jinja
${portal_timeout_short}    20
${portal_timeout_medium}   40
${portal_timeout_long}     60


*** Keywords ***
Generate Random User
    [Arguments]    ${prefix}
    ${RAND}    Generate Random String    4    [NUMBERS]
    ${login_id}=     Set Variable    ${prefix}${RAND}
    ${email_address}=    Set Variable    ${prefix}${RAND}@onap.com
    [Return]   ${login_id}    ${email_address}

Portal admin Login To Portal GUI
    [Documentation]   Logs into Portal GUI
    Setup Browser
    Set Selenium Speed    ${GLOBAL_SELENIUM_DELAY}
    Set Window Size        2000   1000
    Go To    ${PORTAL_LOGIN_URL}
    Set Browser Implicit Wait    ${GLOBAL_SELENIUM_BROWSER_IMPLICIT_WAIT}
    Log    Logging in to ${PORTAL_URL}${PORTAL_ENV}
    Title Should Be    Login
    Input Text    xpath=//input[@ng-model='loginId']    ${GLOBAL_PORTAL_ADMIN_USER}
    Input Password    xpath=//input[@ng-model='password']    ${GLOBAL_PORTAL_ADMIN_PWD}
    Click Link    xpath=//a[@id='loginBtn']
    Sleep    5s
    Go To    ${PORTAL_HOME_URL}
    Wait Until Page Contains Element    xpath=//img[@alt='Onap Logo']    ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
	Log    Logged in to ${PORTAL_URL}${PORTAL_ENV}

Portal admin Go To Portal HOME
    [Documentation]    Navigate to Portal Home
    Go To    ${PORTAL_HOME_URL}
    Wait Until Page Contains Element    xpath=//div[@class='applicationWindow']    ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}

Portal admin User Notifications
    [Documentation]    Navigate to User notification tab
    Click Link    xpath=//a[@id='parent-item-User-Notifications']
    Wait Until Element Is Visible    xpath=//h1[@class='heading-page']    ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
    Click Button    xpath=//button[@id='button-openAddNewApp']
    Click Button    xpath=(//button[@id='undefined'])[1]

Portal admin Add Application Admin Existing User
    [Documentation]    Navigate to Admins tab and add new application admin rights to existing user
    [Arguments]    ${login_id}
    Wait Until Element Is Visible    xpath=//a[@title='Admins']    ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
    Click Link    xpath=//a[@title='Admins']
    Wait Until Element Is Visible    xpath=//h1[contains(.,'Admins')]    ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
    Page Should Contain      Admins
    Click Button    xpath=//button[@ng-click='toggleSidebar()']
    Click Button    xpath=//button[@ng-click='admins.openAddNewAdminModal()']
    Input Text    xpath=//input[@id='input-user-search']    ${login_id}
    Click Button    xpath=//button[@id='button-search-users']
    Click Element    xpath=//span[@id='result-uuid-0']
    Click Button    xpath=//button[@id='search-users-button-next']
    Click Button    xpath=//input[@value='Select application']
    Scroll Element Into View    xpath=(//input[@value='Select application']/following::*[contains(text(),'xDemo App' )])[1]
    Click Element    xpath=(//li[contains(.,'xDemo App' )])[2]
    Click Button    xpath=//button[@id='div-updateAdminAppsRoles']
    Click Element    xpath=//button[@id='admin-div-ok-button']
    Click Element    xpath=//button[@id='div-confirm-ok-button']
    Get Selenium Implicit Wait
    Click Link    xpath=//a[@aria-label='Admins']
    Click Element    xpath=//input[@id='dropdown1']
    Click Element    xpath=//li[contains(.,'xDemo App' )]
    Input Text    xpath=//input[@id='input-table-search']    ${login_id}
    Table Column Should Contain    xpath=//*[@table-data='admins.adminsTableData']    1    ${login_id}

Portal admin Delete Application Admin Existing User
    [Documentation]    Navigate to Admins tab
    [Arguments]    ${login_id}
    Wait Until Element Is Visible    xpath=//a[@title='Admins']    ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
    Click Link    xpath=//a[@title='Admins']
    Wait Until Element Is Visible    xpath=//h1[contains(.,'Admins')]    ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
    Page Should Contain      Admins
    Click Button    xpath=//button[@ng-click='toggleSidebar()']
    Input Text    xpath=//input[@id='input-table-search']    ${login_id}
    Click Element    xpath=(//span[contains(.,'portal')] )[1]
    Click Element    xpath=//*[@id='select-app-xDemo-App']/following::i[@id='i-delete-application']
    Click Element    xpath=//button[@id='div-confirm-ok-button']
    Click Button    xpath=//button[@id='div-updateAdminAppsRoles']
    Click Element    xpath=//button[@id='admin-div-ok-button']
    Element Should Not Contain     xpath=//*[@table-data='admins.adminsTableData']    portal
    Click Image     xpath=//img[@alt='Onap Logo']
    Set Selenium Implicit Wait    ${portal_timeout_short}

Portal admin Add Application admin User New user
    [Documentation]    Navigate to Users tab
    [Arguments]    ${login_id}    ${email_address}
    Click Link    xpath=//a[@title='Users']
    Page Should Contain      Users
    Click Button    xpath=//button[@ng-click='toggleSidebar()']
    Click Button    xpath=//button[@id='users-button-add']
    Click Button    xpath=//button[@id='Create-New-User-button']
    Input Text    xpath=//input[@ng-model='searchUsers.newUser.firstName']    ${login_id}
    Input Text    xpath=//input[@ng-model='searchUsers.newUser.lastName']    ${GLOBAL_PORTAL_ADMIN_USER}
    Input Text    xpath=//input[@ng-model='searchUsers.newUser.emailAddress']    ${email_address}
    Input Text    xpath=//input[@ng-model='searchUsers.newUser.loginId']    ${login_id}
    Input Text    xpath=//input[@ng-model='searchUsers.newUser.loginPwd']    ${GLOBAL_PORTAL_ADMIN_PWD}
    Input Text    xpath=//input[@ng-model='searchUsers.newUser.loginPwdCheck']    ${GLOBAL_PORTAL_ADMIN_PWD}
    Click Button    xpath=//button[@ng-click='searchUsers.addNewUserFun()']
    ${Result}=    Get Element Count     xpath=//*[contains(text(),'User with same loginId already exists')]

    Run Keyword if     '${Result}'== 0     AdminUser does not exist already    ${login_id}
    ...    ELSE     Goto Home Image
    Set Selenium Implicit Wait    ${portal_timeout_short}

Goto Home Image
    Click Image    xpath=//img[@alt='Onap Logo']

AdminUser does not exist already
    [Arguments]    ${login_id}
    Click Button    xpath=//button[@id='next-button']
    Click Element    xpath=//*[@id='div-app-name-dropdown-xDemo-App']
    Click Element    xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='Standard-User-checkbox']
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Click Button    xpath=//button[@id='new-user-save-button']
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Go To    ${PORTAL_HOME_PAGE}
    Click Link    xpath=//a[@title='Users']
    Click Element    xpath=//input[@id='dropdown1']
    Click Element    xpath=//li[contains(.,'xDemo App')]
    Table Column Should Contain    xpath=//*[@table-data='users.accountUsers']    1    ${login_id}
    Click Image     xpath=//img[@alt='Onap Logo']
    Set Selenium Implicit Wait   ${portal_timeout_short}

Portal admin Add Standard User New user
    [Documentation]    Navigate to Users tab
    [Arguments]    ${login_id}    ${email_address}
    Click Link    xpath=//a[@title='Users']
    Page Should Contain      Users
    Click Button    xpath=//button[@ng-click='toggleSidebar()']
    Click Button    xpath=//button[@id='users-button-add']
    Click Button    xpath=//button[@id='Create-New-User-button']
    Input Text    xpath=//input[@ng-model='searchUsers.newUser.firstName']    ${login_id}
    Input Text    xpath=//input[@ng-model='searchUsers.newUser.lastName']    ${GLOBAL_PORTAL_ADMIN_USER}
    Input Text    xpath=//input[@ng-model='searchUsers.newUser.emailAddress']    ${email_address}
    Input Text    xpath=//input[@ng-model='searchUsers.newUser.loginId']    ${login_id}
    Input Text    xpath=//input[@ng-model='searchUsers.newUser.loginPwd']    ${GLOBAL_PORTAL_ADMIN_PWD}
    Input Text    xpath=//input[@ng-model='searchUsers.newUser.loginPwdCheck']    ${GLOBAL_PORTAL_ADMIN_PWD}
    Click Button    xpath=//button[@ng-click='searchUsers.addNewUserFun()']

    ${Result}=    Get Element Count     xpath=//*[contains(text(),'User with same loginId already exists')]

    Run Keyword if     '${Result}'== 0     StaUser does not exist already    ${login_id}
    ...    ELSE     Goto Home Image
    Set Selenium Implicit Wait   ${portal_timeout_short}

StaUser does not exist already
    [Arguments]    ${login_id}
    Click Button    xpath=//button[@id='next-button']
    Click Element    xpath=//*[@id='div-app-name-dropdown-xDemo-App']
    Click Element    xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='Standard-User-checkbox']
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Click Button    xpath=//button[@id='new-user-save-button']
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Go To    ${PORTAL_HOME_PAGE}
    Click Link    xpath=//a[@title='Users']
    Click Element    xpath=//input[@id='dropdown1']
    Click Element    xpath=//li[contains(.,'xDemo App')]
    Table Column Should Contain    xpath=//*[@table-data='users.accountUsers']    1    ${login_id}
    Click Image     xpath=//img[@alt='Onap Logo']
    Set Selenium Implicit Wait   ${portal_timeout_short}

Portal admin Add Application admin User New user -Test
    [Documentation]    Navigate to Users tab
    [Arguments]    ${login_id}    ${email_address}
    Click Link    xpath=//a[@title='Users']
    Page Should Contain      Users
    Click Button    xpath=//button[@ng-click='toggleSidebar()']
    Click Button    xpath=//button[@id='users-button-add']
    Click Button    xpath=//button[@id='Create-New-User-button']
    Input Text    xpath=//input[@ng-model='searchUsers.newUser.firstName']    ${login_id}
    Input Text    xpath=//input[@ng-model='searchUsers.newUser.lastName']    ${GLOBAL_PORTAL_ADMIN_USER}
    Input Text    xpath=//input[@ng-model='searchUsers.newUser.emailAddress']    ${email_address}
    Input Text    xpath=//input[@ng-model='searchUsers.newUser.loginId']    ${login_id}
    Input Text    xpath=//input[@ng-model='searchUsers.newUser.loginPwd']    ${GLOBAL_PORTAL_ADMIN_PWD}
    Input Text    xpath=//input[@ng-model='searchUsers.newUser.loginPwdCheck']    ${GLOBAL_PORTAL_ADMIN_PWD}
    Click Button    xpath=//button[@ng-click='searchUsers.addNewUserFun()']
    Click Button    xpath=//button[@id='search-users-button-cancel']
    Click Image     xpath=//img[@alt='Onap Logo']
    Set Selenium Implicit Wait   ${portal_timeout_short}

Portal admin Add Application Admin Existing User -APPDEMO
    [Documentation]    Navigate to Admins tab
    [Arguments]    ${login_id}
    Wait Until Element Is Visible    xpath=//a[@title='Admins']    ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
    Click Link    xpath=//a[@title='Admins']
    Wait Until Element Is Visible    xpath=//h1[contains(.,'Admins')]    ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
    Page Should Contain      Admins
    Click Button    xpath=//button[@ng-click='toggleSidebar()']
    Click Button    xpath=//button[@ng-click='admins.openAddNewAdminModal()']
    Input Text    xpath=//input[@id='input-user-search']    ${login_id}
    Click Button    xpath=//button[@id='button-search-users']
    Click Element    xpath=//span[@id='result-uuid-0']
    Click Button    xpath=//button[@id='search-users-button-next']
    Click Button    xpath=//input[@value='Select application']
    Scroll Element Into View    xpath=(//input[@value='Select application']/following::*[contains(text(),'xDemo App' )])[1]
    Click Element    xpath=(//li[contains(.,'xDemo App' )])[2]
    Click Button    xpath=//button[@id='div-updateAdminAppsRoles']
    Click Element    xpath=//button[@id='admin-div-ok-button']
    Click Element    xpath=//button[@id='div-confirm-ok-button']
    Get Selenium Implicit Wait
    Click Link    xpath=//a[@aria-label='Admins']
    Click Element    xpath=//input[@id='dropdown1']
    Click Element    xpath=//li[contains(.,'xDemo App' )]
    Input Text    xpath=//input[@id='input-table-search']    ${login_id}
    Table Column Should Contain    xpath=//*[@table-data='admins.adminsTableData']    1    ${login_id}
    Click Image     xpath=//img[@alt='Onap Logo']
    Set Selenium Implicit Wait   ${portal_timeout_short}

Portal admin Add Standard User Existing user
    [Documentation]    Navigate to Users tab
    [Arguments]    ${login_id}
    Click Link    xpath=//a[@title='Users']
    Page Should Contain      Users
    Click Button    xpath=//button[@ng-click='toggleSidebar()']
    Click Button    xpath=//button[@ng-click='users.openAddNewUserModal()']
    Input Text    xpath=//input[@id='input-user-search']    ${login_id}
    Click Button    xpath=//button[@id='button-search-users']
    Click Element    xpath=//span[@id='result-uuid-0']
    Click Button    xpath=//button[@id='next-button']
    Click Element    xpath=//div[@id='app-select-Select roles1']
    Click Element    xpath=//div[@id='app-select-Select roles1']/following::input[@id='Standard-User-checkbox']
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Click Button    xpath=//button[@id='new-user-save-button']
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Go To    ${PORTAL_HOME_PAGE}

Portal admin Edit Standard User Existing user
    [Documentation]    Navigate to Users tab
    [Arguments]    ${login_id}
    Click Link    xpath=//a[@title='Users']
    Click Element    xpath=//input[@id='dropdown1']
    Click Element    xpath=//li[contains(.,'xDemo App')]
    Input Text    xpath=//input[@id='input-table-search']    ${login_id}
    Element Text Should Be      xpath=(.//*[@id='rowheader_t1_0'])[2]   Standard User
    Click Element    xpath=(.//*[@id='rowheader_t1_0'])[2]
    Click Element    xpath=//*[@id='app-select-Standard User1']
    Click Element    xpath=//*[@id='app-select-Standard User1']/following::input[@id='Standard-User-checkbox']
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Click Button    xpath=//button[@id='new-user-save-button']
    Set Selenium Implicit Wait   ${portal_timeout_short}

    Page Should Contain      Users
    Click Button    xpath=//button[@ng-click='toggleSidebar()']
    Click Button    xpath=//button[@ng-click='users.openAddNewUserModal()']
    Input Text    xpath=//input[@id='input-user-search']    ${login_id}
    Click Button    xpath=//button[@id='button-search-users']
    Click Element    xpath=//span[@id='result-uuid-0']
    Click Button    xpath=//button[@id='next-button']
    Click Element    xpath=//div[@id='app-select-Select roles1']
    Click Element    xpath=//div[@id='app-select-Select roles1']/following::input[@id='System-Administrator-checkbox']
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Click Button    xpath=//button[@id='new-user-save-button']
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Page Should Contain      Users
    Input Text    xpath=//input[@id='input-table-search']    ${login_id}
    Element Text Should Be      xpath=(.//*[@id='rowheader_t1_0'])[2]   System Administrator
    Set Selenium Implicit Wait   ${portal_timeout_short}

Portal admin Delete Standard User Existing user
    [Documentation]    Naviage to Users tab
    Click Element    xpath=(.//*[@id='rowheader_t1_0'])[2]
    Set Selenium Implicit Wait   ${portal_timeout_long}
    Scroll Element Into View    xpath=//*[@id='div-app-name-xDemo-App']/following::*[@id='app-item-delete'][1]
    Click Element    xpath=//*[@id='div-app-name-xDemo-App']/following::*[@id='app-item-delete'][1]
    Click Element    xpath=//button[@id='div-confirm-ok-button']
    Click Button    xpath=//button[@id='new-user-save-button']
    Element Should Not Contain     xpath=//*[@table-data='users.accountUsers']    Portal
    Set Selenium Implicit Wait   ${portal_timeout_short}

Functional Top Menu Get Access
    [Documentation]    Navigate to Support tab
	Go To    ${PORTAL_HOME_URL}
    Click Link    xpath=//a[contains(.,'Support')]
    Mouse Over    xpath=//*[contains(text(),'Get Access')]
    Click Link    xpath=//a[contains(.,'Get Access')]
    Element Text Should Be    xpath=//h1[contains(.,'Get Access')]    Get Access
    Set Selenium Implicit Wait   ${portal_timeout_short}

Functional Top Menu Contact Us
    [Documentation]    Navigate to Support tab
    Click Link    xpath=//a[contains(.,'Support')]
    Mouse Over    xpath=//*[contains(text(),'Contact Us')]
    Click Link    xpath=//a[contains(.,'Contact Us')]
    Element Text Should Be    xpath=//h1[contains(.,'Contact Us')]    Contact Us
    Click Image    xpath=//img[@alt='Onap Logo']
    Set Selenium Implicit Wait   ${portal_timeout_short}

Portal admin Edit Functional menu
    [Documentation]    Navigate to Edit Functional menu tab
    Click Link    xpath=//a[@title='Edit Functional Menu']
    Click Link    xpath=.//*[@id='Manage']/div/a
    Click Link    xpath=.//*[@id='Design']/div/a
    Click Link    xpath=.//*[@id='Product_Design']/div/a
    Open Context Menu    xpath=//*[@id='Product_Design']/div/span
    Click Link    xpath=//a[@href='#add']
    Input Text    xpath=//input[@id='input-title']    ONAP Test
    Click Element     xpath=//input[@id='select-app']
    Scroll Element Into View    xpath=//li[contains(.,'xDemo App')]
    Click Element    xpath=//li[contains(.,'xDemo App')]
    Input Text    xpath=//input[@id='input-url']    http://google.com
    Click Button    xpath=//button[@id='button-save-continue']
    Click Element    xpath=//*[@id='app-select-Select Roles']
    Click Element    xpath=//input[@id='Standard_User-checkbox']
    # this fails in windriver - can not save
    Click Element    xpath=//button[@id='button-save-add']
    Click Image     xpath=//img[@alt='Onap Logo']
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Click Link    xpath=//a[contains(.,'Manage')]
    Mouse Over    xpath=//*[contains(text(),'Design')]
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Element Text Should Be    xpath=//a[contains(.,'ONAP Test')]      ONAP Test
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Click Image    xpath=//img[@alt='Onap Logo']
    Click Link    xpath=//a[@title='Edit Functional Menu']
    Click Link    xpath=.//*[@id='Manage']/div/a
    Click Link    xpath=.//*[@id='Design']/div/a
    Click Link    xpath=.//*[@id='Product_Design']/div/a
    Open Context Menu    xpath=//*[@id='ONAP_Test']
    Click Link    xpath=//a[@href='#delete']
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Click Element    xpath=//button[@id='div-confirm-ok-button']
    Click Image     xpath=//img[@alt='Onap Logo']
    Set Selenium Implicit Wait   ${portal_timeout_long}
    Click Link    xpath=//a[contains(.,'Manage')]
    Mouse Over    xpath=//*[contains(text(),'Design')]
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Element Should Not Contain    xpath=(.//*[contains(.,'Design')]/following::ul[1])[1]      ONAP Test
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Click Image     xpath=//img[@alt='Onap Logo']
    Set Selenium Implicit Wait   ${portal_timeout_short}

Portal admin Microservice Onboarding
    [Documentation]    Navigate to Edit Functional menu tab
    Click Link    xpath=//a[@title='Microservice Onboarding']
    Click Button    xpath=//button[@id='microservice-onboarding-button-add']
    Input Text    xpath=//input[@name='name']    Test Microservice
    Input Text    xpath=//*[@name='desc']    Test
    Click Element    xpath=//input[@id='microservice-details-input-app']
    Scroll Element Into View    xpath=//li[contains(.,'xDemo App')]
    Click Element    xpath=//li[contains(.,'xDemo App')]
    Click Element     xpath=//*[@name='desc']
    Input Text    xpath=//input[@name='url']    ${PORTAL_MICRO_ENDPOINT}
    Click Element    xpath=//input[@id='microservice-details-input-security-type']
    Scroll Element Into View    xpath=//li[contains(.,'Basic Authentication')]
    Click Element    xpath=//li[contains(.,'Basic Authentication')]
    Input Text    xpath=//input[@name='username']    ${GLOBAL_PORTAL_ADMIN_USER}
    Input Text    xpath=//input[@name='password']    ${GLOBAL_PORTAL_ADMIN_PWD}
    Click Button    xpath=//button[@id='microservice-details-save-button']
    Table Column Should Contain    xpath=//*[@table-data='serviceList']    1    Test Microservice
    Set Selenium Implicit Wait   ${portal_timeout_short}

Portal admin Microservice Delete
    [Documentation]    Navigate to Edit Functional menu tab
    Click Link    xpath=//a[@title='Microservice Onboarding']
    Click Button    xpath=//button[@id='microservice-onboarding-button-add']
    Input Text    xpath=//input[@name='name']    TestMS
    Input Text    xpath=//*[@name='desc']    TestMS
    Click Element    xpath=//input[@id='microservice-details-input-app']
    Scroll Element Into View    xpath=//li[contains(.,'xDemo App')]
    Click Element    xpath=//li[contains(.,'xDemo App')]
    Click Element     xpath=//*[@name='desc']
    Input Text    xpath=//input[@name='url']    ${PORTAL_MICRO_ENDPOINT}
    Click Element    xpath=//input[@id='microservice-details-input-security-type']
    Scroll Element Into View    xpath=//li[contains(.,'Basic Authentication')]
    Click Element    xpath=//li[contains(.,'Basic Authentication')]
    Input Text    xpath=//input[@name='username']    ${GLOBAL_PORTAL_ADMIN_USER}
    Input Text    xpath=//input[@name='password']    ${GLOBAL_PORTAL_ADMIN_PWD}
    Click Button    xpath=//button[@id='microservice-details-save-button']
    Execute Javascript    window.scrollTo(0,document.body.scrollHeight);
    Click Element    xpath=(.//*[contains(text(),'TestMS')]/following::*[@ng-click='microserviceOnboarding.deleteService(rowData)'])[1]
    Click Button    xpath=//button[@id="div-confirm-ok-button"]
    Set Selenium Implicit Wait   ${portal_timeout_short}

Portal Admin Create Widget for All users
    [Documentation]    Navigate to Create Widget menu tab
    ${WidgetAttachment}=    Catenate    ${PORTAL_ASSETS_DIRECTORY}news_widget.zip
    Wait until page contains Element    xpath=//a[@title='Widget Onboarding']     ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
    Click Link    xpath=//a[@title='Widget Onboarding']
    Click Button    xpath=//button[@ng-click='toggleSidebar()']
    Click Button    xpath=//button[@id='widget-onboarding-button-add']
    Input Text    xpath=//*[@name='name']    ONAP-xDemo
    Input Text    xpath=//*[@name='desc']    ONAP xDemo
    Click Element    xpath=//*[@id='widgets-details-input-endpoint-url']
    Scroll Element Into View    xpath=//li[contains(.,'News Microservice')]
    Click Element    xpath=//li[contains(.,'News Microservice')]
    Click Element    xpath=//*[contains(text(),'Allow all user access')]/preceding::input[@ng-model='widgetOnboardingDetails.widget.allUser'][1]
    Choose File    xpath=//input[@id='widget-onboarding-details-upload-file']    ${WidgetAttachment}
    Click Button    xpath=//button[@id='widgets-details-save-button']
    Wait Until Page Contains      ONAP-xDemo    ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
    Page Should Contain    ONAP-xDemo
    Set Selenium Implicit Wait   ${portal_timeout_short}
    GO TO    ${PORTAL_HOME_PAGE}

Portal Admin Delete Widget for All users
    [Documentation]    Navigate to delete Widget menu tab
    Click Link    xpath=//a[@title='Widget Onboarding']
    Click Element    xpath=//input[@id='dropdown1']
    Click Element    xpath=//li[contains(.,'xDemo App')]
    Click Button    xpath=//button[@ng-click='toggleSidebar()']
    Click Element    xpath=(.//*[contains(text(),'ONAP-xDemo')]/following::*[@ng-click='widgetOnboarding.deleteWidget(rowData)'])[1]
    Click Element    xpath=//button[@id='div-confirm-ok-button']
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Element Should Not Contain     xpath=//*[@table-data='portalAdmin.portalAdminsTableData']    ONAP-xDemo

Portal Admin Create Widget for Application Roles
    [Documentation]    Navigate to Create Widget menu tab
    ${WidgetAttachment}=    Catenate    ${PORTAL_ASSETS_DIRECTORY}news_widget.zip
    Click Link    xpath=//a[@title='Widget Onboarding']
    Click Button    xpath=//button[@ng-click='toggleSidebar()']
    Click Button    xpath=//button[@id='widget-onboarding-button-add']
    Input Text    xpath=//*[@name='name']    ONAP-xDemo
    Input Text    xpath=//*[@name='desc']    ONAP xDemo
    Click Element    xpath=//*[@id='widgets-details-input-endpoint-url']
    Scroll Element Into View    xpath=//li[contains(.,'News Microservice')]
    Click Element    xpath=//li[contains(.,'News Microservice')]
    Click element    xpath=//*[@id="app-select-Select Applications"]
    Click element    xpath=//*[@id="xDemo-App-checkbox"]
    Click element    xpath=//*[@name='desc']
    Click element    xpath=//*[@id="app-select-Select Roles0"]
    Click element    xpath=//*[@id="Standard-User-checkbox"]
    Click element    xpath=//*[@name='desc']
    Scroll Element Into View    xpath=//input[@id='widget-onboarding-details-upload-file']
    Choose File    xpath=//input[@id='widget-onboarding-details-upload-file']    ${WidgetAttachment}
    Click Button    xpath=//button[@id='widgets-details-save-button']
    Click Image     xpath=//img[@alt='Onap Logo']
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Click Link    xpath=//a[@title='Widget Onboarding']
    Click Element    xpath=//input[@id='dropdown1']
    Click Element    xpath=//li[contains(.,'xDemo App')]
    Page Should Contain    ONAP-xDemo
    Set Selenium Implicit Wait   ${portal_timeout_short}
    GO TO    ${PORTAL_HOME_PAGE}

Portal Admin Delete Widget for Application Roles
    Click Link    xpath=//a[@title='Widget Onboarding']
    Click Element    xpath=//input[@id='dropdown1']
    Click Element    xpath=//li[contains(.,'xDemo App')]
    Click Button    xpath=//button[@ng-click='toggleSidebar()']
    Scroll Element Into View    xpath=//*[contains(text(),'ONAP-xDemo')]/following::td[3]/div
    Click Element    xpath=//*[contains(text(),'ONAP-xDemo')]/following::td[3]/div
    Click Element    xpath=//button[@id='div-confirm-ok-button']
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Element Should Not Contain     xpath=//*[@table-data='portalAdmin.portalAdminsTableData']    ONAP-xDemo
    Set Selenium Implicit Wait   ${portal_timeout_short}

Portal Admin Edit Widget
    [Documentation]    Navigate to Home tab
    Click Element    xpath=(//h3[contains(text(),'News')]/following::span[1])[1]
    Set Browser Implicit Wait    30
    Mouse Over    xpath=(//h3[contains(text(),'News')]/following::span[1]/following::a[contains(text(),'Edit')])[1]
    Click Link    xpath=(//h3[contains(text(),'News')]/following::span[1]/following::a[contains(text(),'Edit')])[1]
    Input Text    xpath=//input[@name='title']    ONAP_VID
    Input Text    xpath=//input[@name='url']    http://about.att.com/news/international.html
    Input Text    xpath=//input[@id='widget-input-add-order']    5
    Click Link    xpath=//a[contains(.,'Add New')]
    Click Element    xpath=//div[@id='close-button']
    Element Should Contain    xpath=//*[@table-data='ignoredTableData']    ONAP_VID
    Click Element    xpath=.//div[contains(text(),'ONAP_VID')]/following::*[contains(text(),'5')][1]/following::div[@ng-click='remove($index);'][1]
    Click Element    xpath=//div[@id='confirmation-button-next']
    Element Should Not Contain    xpath=//*[@table-data='ignoredTableData']    ONAP_VID
    Click Link    xpath=//a[@id='close-button']
    Set Selenium Implicit Wait   ${portal_timeout_short}

Portal Admin Broadcast Notifications
    [Documentation]   Portal Test Admin Broadcast Notifications
    ${CurrentDay}=    Get Current Date    increment=24:00:00    result_format=%m/%d/%Y
    ${NextDay}=    Get Current Date    increment=48:00:00    result_format=%m/%d/%Y
    ${CurrentDate}=    Get Current Date    increment=24:00:00    result_format=%m%d%y%H%M
    ${AdminBroadCastMsg}=    catenate    ONAP VID Broadcast Automation${CurrentDate}
    Go To    ${PORTAL_HOME_URL}
    Click Image     xpath=//img[@alt='Onap Logo']
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Click Link    xpath=//*[@id="parent-item-User-Notifications"]
    Wait until Element is visible    xpath=//*[@id="button-openAddNewApp"]    timeout=10
    Click button    xpath=//*[@id="button-openAddNewApp"]
    Input Text    xpath=//input[@id='datepicker-start']     ${CurrentDay}
    Input Text    xpath=//input[@id='datepicker-end']     ${NextDay}
    Input Text    xpath=//*[@id="add-notification-input-title"]    ONAP VID Broadcast Automation
    Input Text    xpath=//*[@id="user-notif-input-message"]    ${AdminBroadCastMsg}
    Click element    xpath=//*[@id="button-notification-save"]
    Wait until Element is visible    xpath=//*[@id="button-openAddNewApp"]    timeout=10
    Click element    xpath=//*[@id="megamenu-notification-button"]
    Click element    xpath=//*[@id="notification-history-link"]
    Wait until Element is visible    xpath=//*[@id="notification-history-table"]    timeout=10
    Table Column Should Contain    xpath=//*[@id="notification-history-table"]    2    ${AdminBroadCastMsg}
    Set Selenium Implicit Wait   ${portal_timeout_short}
    log    ${AdminBroadCastMsg}
    [Return]     ${AdminBroadCastMsg}

Portal Admin Category Notifications
    [Documentation]   Portal Admin Broadcast Notifications
    ${CurrentDay}=    Get Current Date    increment=24:00:00    result_format=%m/%d/%Y
    ${NextDay}=    Get Current Date    increment=48:00:00    result_format=%m/%d/%Y
    ${CurrentDate}=    Get Current Date    increment=24:00:00    result_format=%m%d%y%H%M
    ${AdminCategoryMsg}=    catenate    ONAP VID Category Automation${CurrentDate}
    Click Link    xpath=//a[@id='parent-item-Home']
    Click Link    xpath=//*[@id="parent-item-User-Notifications"]
    Wait until Element is visible    xpath=//*[@id="button-openAddNewApp"]    timeout=10
    Click button    xpath=//*[@id="button-openAddNewApp"]
    Click Element    //*[contains(text(),'Broadcast to All Categories')]/following::*[contains(text(),'No')][1]
    Click Element    xpath=//*[contains(text(),'Categories')]/following::*[contains(text(),'Application Roles')][1]
    Click Element    xpath=//*[contains(text(),'xDemo App')]/preceding::input[@ng-model='member.isSelected'][1]
    Input Text    xpath=//input[@id='datepicker-start']     ${CurrentDay}
    Input Text    xpath=//input[@id='datepicker-end']     ${NextDay}
    Input Text    xpath=//*[@id="add-notification-input-title"]    ONAP VID Category Automation
    Input Text    xpath=//*[@id='user-notif-input-message']    ${AdminCategoryMsg}
    Click element    xpath=//*[@id="button-notification-save"]
    Wait until Element is visible    xpath=//*[@id="button-openAddNewApp"]    timeout=10
    Click element    xpath=//*[@id="megamenu-notification-button"]
    Click element    xpath=//*[@id="notification-history-link"]
    Wait until Element is visible    xpath=//*[@id="notification-history-table"]    timeout=10
    Table Column Should Contain    xpath=//*[@id="notification-history-table"]    2    ${AdminCategoryMsg}
    Set Selenium Implicit Wait   ${portal_timeout_short}
    log    ${AdminCategoryMsg}
    [Return]     ${AdminCategoryMsg}

Portal admin Logout from Portal GUI
    [Documentation]   Logout from Portal GUI
    Click Element    xpath=//div[@id='header-user-icon']
    Run Keyword And Ignore Error    Click Button    xpath=//button[contains(.,'Log out')]
    # TODO: Rework Logout tests to deal with intermittent "document unloaded while waiting for result" errors

Application admin Login To Portal GUI
    [Documentation]   Logs into Portal GUI
    [Arguments]    ${login_id}
    Go To    ${PORTAL_LOGIN_URL}
    Title Should Be    Login
    Input Text    xpath=//input[@ng-model='loginId']    ${login_id}
    Input Password    xpath=//input[@ng-model='password']    ${GLOBAL_PORTAL_ADMIN_PWD}
    Click Link    xpath=//a[@id='loginBtn']
    Sleep    5s
    Go To    ${PORTAL_HOME_URL}
    Wait Until Page Contains Element    xpath=//img[@alt='Onap Logo']    ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
    Log    Logged in to ${PORTAL_URL}${PORTAL_ENV}

Application Admin Navigation Application Link Tab
    [Documentation]   Logs into Portal GUI as application admin
    Click Link    xpath=//a[@id='parent-item-Home']
    Click Element    xpath=.//h3[contains(text(),'xDemo App')]/following::div[1]
    Page Should Contain    ONAP Portal
    Scroll Element Into View    xpath=//i[@class='ion-close-round']
    Click Element    xpath=//i[@class='ion-close-round']
    Set Selenium Implicit Wait   ${portal_timeout_short}

Application Admin Navigation Functional Menu
    [Documentation]   Logs into Portal GUI as application admin
    Click Link    xpath=//a[contains(.,'Manage')]
    Mouse Over    xpath=//*[contains(text(),'Technology Insertion')]
    Click Link    xpath= //*[contains(text(),'Infrastructure VNF Provisioning')]
    Page Should Contain    ONAP Portal
    Click Element    xpath=//i[@class='ion-close-round']
    Click Element    xpath=(.//span[@id='tab-Home'])[1]

Application admin Add Standard User Existing user
    [Documentation]    Navigate to Users tab
    [Arguments]    ${login_id}
    Click Link    xpath=//a[@title='Users']
    Page Should Contain      Users
    Click Button    xpath=//button[@ng-click='toggleSidebar()']
    Click Button    xpath=//button[@ng-click='users.openAddNewUserModal()']
    Input Text    xpath=//input[@id='input-user-search']    ${login_id}
    Click Button    xpath=//button[@id='button-search-users']
    Click Element    xpath=//span[@id='result-uuid-0']
    Click Button    xpath=//button[@id='next-button']
    Click Element    xpath=//*[@id='div-app-name-dropdown-xDemo-App']
    Click Element    xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='Standard-User-checkbox']
    Click Button    xpath=//button[@id='new-user-save-button']
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Go To    ${PORTAL_HOME_PAGE}
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Click Link    xpath=//a[@title='Users']
    Click Element    xpath=//input[@id='dropdown1']
    Click Element    xpath=//li[contains(.,'xDemo App')]
    Input Text    xpath=//input[@id='input-table-search']    ${login_id}
    Element Text Should Be      xpath=(.//*[@id='rowheader_t1_0'])[2]   Standard User

Application admin Edit Standard User Existing user
    [Documentation]    Navigate to Users tab
    [Arguments]    ${login_id}
    Click Element    xpath=(.//*[@id='rowheader_t1_0'])[2]
    Click Element    xpath=//*[@id='div-app-name-dropdown-xDemo-App']
    Click Element    xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='Standard-User-checkbox']
    Click Element    xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='System-Administrator-checkbox']
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Click Button    xpath=//button[@id='new-user-save-button']
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Page Should Contain      Users
    Input Text    xpath=//input[@id='input-table-search']    ${login_id}
    Element Text Should Be      xpath=(.//*[@id='rowheader_t1_0'])[2]   System Administrator

Application admin Delete Standard User Existing user
    [Documentation]    Naviage to Users tab
    Click Element    xpath=(.//*[@id='rowheader_t1_0'])[2]
    Scroll Element Into View    xpath=//*[@id='div-app-name-xDemo-App']/following::*[@id='app-item-delete'][1]
    Click Element    xpath=//*[@id='div-app-name-xDemo-App']/following::*[@id='app-item-delete'][1]
    Click Element    xpath=//button[@id='div-confirm-ok-button']
    Click Button    xpath=//button[@id='new-user-save-button']
    Element Should Not Contain     xpath=//*[@table-data='users.accountUsers']    Portal
    Set Selenium Implicit Wait   ${portal_timeout_short}

Application admin Logout from Portal GUI
    [Documentation]   Logout from Portal GUI
    Click Element    xpath=//div[@id='header-user-icon']
    Run Keyword And Ignore Error    Click Button    xpath=//button[contains(text(),'Log out')]
    # TODO: Rework Logout tests to deal with intermittent "document unloaded while waiting for result" errors

Standard user Login To Portal GUI
    [Documentation]   Logs into Portal GUI
    [Arguments]    ${login_id}
    Go To    ${PORTAL_LOGIN_URL}
    Title Should Be    Login
    Input Text    xpath=//input[@ng-model='loginId']    ${login_id}
    Input Password    xpath=//input[@ng-model='password']    ${GLOBAL_PORTAL_ADMIN_PWD}
    Click Link    xpath=//a[@id='loginBtn']
    Sleep    5s
    Go To    ${PORTAL_HOME_URL}
    Wait Until Page Contains Element    xpath=//img[@alt='Onap Logo']    ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
    Log    Logged in to ${PORTAL_URL}${PORTAL_ENV}

Standard user Navigation Application Link Tab
    [Documentation]   Logs into Portal GUI as application admin
    Click Element    xpath=.//h3[contains(text(),'xDemo App')]/following::div[1]
    Page Should Contain    ONAP Portal
    Click Element    xpath=(.//span[@id='tab-Home'])[1]
    Set Selenium Implicit Wait   ${portal_timeout_short}

Standard user Navigation Functional Menu
    [Documentation]   Logs into Portal GUI as application admin
    Click Link    xpath=//a[contains(.,'Manage')]
    Mouse Over    xpath=//*[contains(text(),'Technology Insertion')]
    Click Link    xpath= //*[contains(text(),'Infrastructure VNF Provisioning')]
    Page Should Contain    Welcome to VID
    Click Element    xpath=(.//span[@id='tab-Home'])[1]
    Set Selenium Implicit Wait   ${portal_timeout_short}

Standard user Broadcast Notifications
    [Documentation]   Logs into Portal GUI as application admin
    [Arguments]    ${AdminBroadCastMsg}
    Click element    xpath=//*[@id='megamenu-notification-button']
    Click element    xpath=//*[@id='notification-history-link']
    Wait until Element is visible    xpath=//*[@id='app-title']    timeout=10
    Table Column Should Contain    xpath=//*[@id='notification-history-table']    2    ${AdminBroadCastMsg}
    log    ${AdminBroadCastMsg}

Standard user Category Notifications
    [Documentation]   Logs into Portal GUI as application admin
    [Arguments]    ${AdminCategoryMsg}
    Wait until Element is visible    xpath=//*[@id='app-title']    timeout=10
    Table Column Should Contain    xpath=//*[@id='notification-history-table']    2    ${AdminCategoryMsg}
    log    ${AdminCategoryMsg}

Standard user Logout from Portal GUI
    [Documentation]   Logout from Portal GUI
    Click Element    xpath=//div[@id='header-user-icon']
    Run Keyword And Ignore Error    Click Button    xpath=//button[contains(.,'Log out')]
    # TODO: Rework Logout tests to deal with intermittent "document unloaded while waiting for result" errors

Portal admin Add New Account
    ${rand}    Generate Random String    4    [NUMBERS]
    ${AppUserName}=           Set Variable    testApp${rand}
    ${AppPassword}=           Set Variable    testApp${rand}123!
    Click Link    //*[@id="parent-item-App-Account-Management"]
    Click Button    xpath=//button[@ng-click='toggleSidebar()']
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Click Button    //*[@id="account-onboarding-button-add"]
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Input Text    //*[@id="account-details-input-name"]    ${AppUserName}
    Input Text    //*[@id="account-details-input-username"]    ${AppUserName}
    Input Text    //*[@id="account-details-input-password"]    ${AppPassword}
    Input Text    //*[@id="account-details-input-repassword"]    ${AppPassword}
    #account-details-next-button
    Click Button    xpath=//button[@ng-click='accountAddDetails.saveChanges()']

Portal admin Delete Account
    Click Link    //*[@id="parent-item-App-Account-Management"]
    Click Button    xpath=//button[@ng-click='toggleSidebar()']
    Set Selenium Implicit Wait   ${portal_timeout_short}
    Click Button    //*[@id="account-onboarding-button-add"]
    Set Selenium Implicit Wait   ${portal_timeout_short}

Enhanced Notification on ONAP Portal
    [Documentation]     Runs portal Post request
    [Arguments]     ${data_path}     ${data}
    ${session}=         Create Session     portal         ${PORTAL_URL}
    ${headers}=     Create Dictionary     Accept=application/json    Content-Type=application/json    Authorization=Basic amlyYTpfcGFzcw==    username=jira    password=_pass
    ${resp}=     Post Request     portal     ${data_path}     data=${data}     headers=${headers}
    [Return]     ${resp}

Notification on ONAP Portal
    [Documentation]     Create Config portal
    ${configportal}=     Create Dictionary     jira_id=jira
    Templating.Create Environment    portal    ${GLOBAL_TEMPLATE_FOLDER}
    ${output} =     Templating.Apply Template     portal    ${portal_Template}     ${configportal}
    ${post_resp} =     Enhanced Notification on ONAP Portal     ${RESOURCE_PATH}     ${output}
    Should Be Equal As Strings     ${post_resp.status_code}     200

Portal Application Account Management
    [Documentation]    Navigate to Application Account Management tab
    Click Link    xpath=//a[@title='App Account Management']
    Click Button    xpath=//button[@id='account-onboarding-button-add']
    Input Text    xpath=//input[@name='name']    JIRA
    Input Text    xpath=//input[@name='username']    jira
    Input Text    xpath=//input[@name='password']    _pass
    Input Text    xpath=//input[@name='repassword']    _pass
    Click Element    xpath=//div[@ng-click='accountAddDetails.saveChanges()']
    Element Text Should Be    xpath=//*[@table-data='serviceList']    JIRA

Portal Application Account Management validation
    [Documentation]    Navigate to user notification tab
    Click Link    xpath=//a[@id='parent-item-User-Notifications']
    Click Element    xpath=//*[@id="megamenu-notification-button"]
    Click Element    xpath=//*[@id="notification-history-link"]
    Wait until Element is visible    xpath=//*[@id="notification-history-table"]    timeout=10
    Table Column Should Contain    xpath=//*[@id="notification-history-table"]    1    JIRA

Portal AAF new fields
    [Documentation]    Navigate to user Application details tab
    Click Link    xpath=//a[@title='Application Onboarding']
    Click Element    xpath=//td[contains(.,'xDemo App')]
    Page Should Contain    Name Space
    Page Should Contain    Centralized
    Click Element    xpath=//button[@id='button-notification-cancel']
    Set Selenium Implicit Wait   ${portal_timeout_short}

Portal Change REST URL
    [Documentation]    Navigate to user Application details tab
    Click Link    xpath=//a[@title='Application Onboarding']
    Wait Until Element Is Enabled    xpath=//td[contains(.,'xDemo App')]    30s
    Click Element    xpath=//td[contains(.,'xDemo App')]
    Input Text    xpath=//input[@name='restUrl']    ${PORTAL_XDEMPAPP_REST_URL}
    Click Element    xpath=//button[@id='button-save-app']
    Set Selenium Implicit Wait   ${portal_timeout_medium}
    Go To    ${PORTAL_HOME_PAGE}
    Wait Until Element Is Visible    xpath=//a[@title='Application Onboarding']    ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}

Admin widget download
    Go To    ${PORTAL_HOME_URL}
    Wait until page contains Element    xpath=//a[@title='Widget Onboarding']     ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
    Click Link  xpath=//a[@title='Widget Onboarding']
    Wait until page contains Element    xpath=//table[@class='ng-scope']
    ${td_id}=  get element attribute    xpath=//*[contains(text(),'Events')]    id
    log    ${td_id}
    ${test}=    Get Substring     ${td_id}   -1
    log    ${test}
    ${download_link_id}=    Catenate    'widget-onboarding-div-download-widget-${test}'
    click Element  xpath=//*[@id=${download_link_id}]

Reset widget layout option
    Go To    ${PORTAL_HOME_URL}
    Wait Until Page Contains Element    xpath=//div[@id='widget-boarder']     ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
    Execute Javascript      document.getElementById('widgets').scrollTo(0,1400)
    Wait Until Page Contains Element     xpath=//*[@id='widget-gridster-Events-icon']    ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
    Execute Javascript      document.getElementById('widgets').scrollTo(0,1800)
    #Drag And Drop By Offset   xpath=//*[@id='widget-gridster-Events-icon']   500  500
    ${width} 	${height}= 	Get Window Size
    Set Window Size        2000   1000
    ${width} 	${height}= 	Get Window Size
    Drag And Drop By Offset   xpath=//*[@id='widget-gridster-Events-icon']   100  -100
    Execute Javascript      document.getElementById('widgets').scrollTo(0,document.getElementById('widgets').scrollHeight);
    Execute Javascript      document.getElementById('dashboardDefaultPreference').click()
    Execute Javascript      document.getElementById('div-confirm-ok-button').click()

Add Portal Admin
    [Arguments]    ${login_id}
    Click Link    xpath=//a[@id='parent-item-Portal-Admins']
    Scroll Element Into View    xpath=//button[@id='portal-admin-button-add']
    Click Button    xpath=//button[@id='portal-admin-button-add']
    Input Text    xpath=//input[@id='input-user-search']    ${login_id}
    Click Button    xpath=//button[@id='button-search-users']
    Wait Until Page Contains Element     xpath=//span[@id='result-uuid-0']    ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
    Click Element    xpath=//span[@id='result-uuid-0']
    Click Button     xpath=//button[@id='pa-search-users-button-save']
    Click Button     xpath=//button[@id='admin-div-ok-button']

Delete Portal Admin
    Wait Until Page Does Not Contain Element     xpath=//*[@class='b2b-modal-header']
    Click Link    xpath=//a[@id='parent-item-Portal-Admins']
    Click Element    xpath=//td[contains(.,'portal')]/following::span[@id='1-button-portal-admin-remove']
    Click Button     xpath=//*[@id='div-confirm-ok-button']