diff --git a/gui/gui_test/settings_menu/test_network_sub_menu.robot b/gui/gui_test/settings_menu/test_network_sub_menu.robot
index 4fe4de8..cc3c6ce 100644
--- a/gui/gui_test/settings_menu/test_network_sub_menu.robot
+++ b/gui/gui_test/settings_menu/test_network_sub_menu.robot
@@ -8,499 +8,59 @@
 Suite Setup     Suite Setup Execution
 Suite Teardown  Close Browser
 
+
 *** Variables ***
 
-${xpath_network_heading}          //h1[text()="Network"]
-${xpath_interface}                //h2[text()="Interface"]
-${xpath_system}                   //h2[text()="System"]
-${xpath_static_ipv4}              //h2[text()="IPV4"]
-${xpath_static_dns}               //h2[text()="Static DNS"]
-${xpath_hostname_input}           //*[@data-test-id="network-input-hostname"]
-${xpath_network_save_settings}    //button[@data-test-id="network-button-saveNetworkSettings"]
-${xpath_default_gateway_input}    //*[@data-test-id="network-input-gateway"]
-${xpath_mac_address_input}        //*[@data-test-id="network-input-macAddress"]
-${xpath_static_input_ip0}         //*[@data-test-id="network-input-staticIpv4-0"]
-${xpath_static_input_ip1}         //*[@data-test-id="network-input-staticIpv4-1"]
-${xpath_add_static_ip}            //button[contains(text(),"Add static IP")]
-${xpath_setting_success}          //*[contains(text(),"Successfully saved network settings.")]
-${xpath_add_dns_server}           //button[contains(text(),"Add DNS server")]
-${xpath_network_interface}        //*[@data-test-id="network-select-interface"]
-${xpath_input_netmask_addr0}      //*[@data-test-id="network-input-subnetMask-0"]
-${xpath_input_netmask_addr1}      //*[@data-test-id="network-input-subnetMask-1"]
-${xpath_delete_static_ip}         //*[@title="Delete IPv4 row"]
-${xpath_input_dns_server}         //*[@data-test-id="network-input-dnsAddress-0"]
-${xpath_delete_dns_server}        //*[@title="Delete DNS row"]
-${xpath_delete_static_ip}         //*[@title="Delete IPv4 row"]
+${xpath_network_heading}                 //h1[text()="Network"]
+${xpath_interface_settings}              //h2[text()="Interface settings"]
+${xpath_network_settings}                //h2[text()="Network settings"]
+${xpath_static_ipv4}                     //h2[text()="IPv4"]
+${xpath_static_dns}                      //h2[text()="Static DNS"]
+${xpath_domain_name_toggle}              //*[@data-test-id="networkSettings-switch-useDomainName"]
+${xpath_dns_servers_toggle}              //*[@data-test-id="networkSettings-switch-useDns"]
+${xpath_ntp_servers_toggle}              //*[@data-test-id="networkSettings-switch-useNtp"]
+${xpath_add_static_ipv4_address_button}  //button[contains(text(),"Add static IPv4 address")]
+${xpath_add_dns_ip_address_button}       //button[contains(text(),"Add IP address")]
 
-@{static_name_servers}            10.10.10.10
-@{null_value}                     null
-@{empty_dictionary}               {}
-@{string_value}                   aa.bb.cc.dd
-@{special_char_value}             @@@.%%.44.11
-
-${test_ipv4_addr}                 10.7.7.7
-${test_ipv4_addr2}                10.7.7.8
-${test_subnet_mask}               255.255.0.0
-
-# Valid netmask is 4 bytes long and has continuous block of 1s.
-# Maximum valid value in each octet is 255 and least value is 0.
-# Maximum value of octet in netmask is 255.
-${alpha_netmask}                  ff.ff.ff.ff
-${out_of_range_netmask}           255.256.255.0
-${more_byte_netmask}              255.255.255.0.0
-${lowest_netmask}                 128.0.0.0
-${test_hostname}                  openbmc
 
 *** Test Cases ***
 
 Verify Navigation To Network Page
-    [Documentation]  Verify navigation to network page.
+    [Documentation]  Login to GUI and navigate to the settings sub-menu network page.
     [Tags]  Verify_Navigation_To_Network_Page
 
     Page Should Contain Element  ${xpath_network_heading}
 
 
 Verify Existence Of All Sections In Network Page
-    [Documentation]  Verify existence of all sections in network settings page.
+    [Documentation]  Login to GUI and navigate to the settings sub-menu network page
+    ...  and confirm the page contains sections that should be accessible.
     [Tags]  Verify_Existence_Of_All_Sections_In_Network_Page
 
-    Page Should Contain Element  ${xpath_interface}
-    Page Should Contain Element  ${xpath_system}
+    Wait Until Page Contains Element  ${xpath_network_settings}  timeout=1min
+    Page Should Contain Element  ${xpath_interface_settings}
     Page Should Contain Element  ${xpath_static_ipv4}
     Page Should Contain Element  ${xpath_static_dns}
-    Page Should Contain Button   ${xpath_delete_static_ip}
 
 
 Verify Existence Of All Buttons In Network Page
-    [Documentation]  Verify existence of all buttons in network page.
+    [Documentation]  Login to GUI and navigate to the settings sub-menu network page
+    ...  and confirm the page contains basic features button that should be accessible.
     [Tags]  Verify_Existence_Of_All_Buttons_In_Network_Page
 
-    Page Should Contain Element  ${xpath_add_static_ip}
-    Page Should Contain Element  ${xpath_add_dns_server}
-
-
-Verify Network From Server Configuration
-    [Documentation]  Verify ability to select "Network" sub-menu option
-    ...  of "Settings".
-    [Tags]  Verify_Network_From_Server_Configuration
-
-    Page Should Contain  IP address
-
-
-Verify Hostname Text Configuration
-    [Documentation]  Verify hostname text is configurable from "network settings"
-    ...  sub-menu.
-    [Tags]  Verify_Hostname_Text_Configuration
-
-    Wait Until Element Is Enabled  ${xpath_hostname_input}
-    Input Text  ${xpath_hostname_input}  ${test_hostname}
-    Click Button  ${xpath_network_save_settings}
-    Wait Until Page Contains Element  ${xpath_setting_success}  timeout=10
-    Wait Until Keyword Succeeds  15 sec  5 sec  Textfield Should Contain  ${xpath_hostname_input}
-    ...  ${test_hostname}
-
-
-Verify Default Gateway Editable
-    [Documentation]  Verify default gateway text input allowed from "network
-    ...  settings".
-    [Tags]  Verify_Default_Gateway_Editable
-    [Teardown]  Click Element  ${xpath_refresh_button}
-
-    Wait Until Page Contains Element  ${xpath_default_gateway_input}
-    Input Text  ${xpath_default_gateway_input}  10.6.6.7
-
-
-Verify MAC Address Editable
-    [Documentation]  Verify MAC address text input allowed from "network
-    ...  settings".
-    [Tags]  Verify_MAC_Address_Editable
-    [Teardown]  Click Element  ${xpath_refresh_button}
-
-    Wait Until Element Is Enabled  ${xpath_mac_address_input}
-    Input Text  ${xpath_mac_address_input}  AA:E2:84:14:28:79
-
-
-Verify Static IP Address Editable
-    [Documentation]  Verify static IP address is editable.
-    [Tags]  Verify_Static_IP_Address_Editable
-    [Teardown]  Click Element  ${xpath_refresh_button}
-
-    ${exists}=  Run Keyword And Return Status  Wait Until Page Contains Element  ${xpath_static_input_ip0}
-    Run Keyword If  '${exists}' == '${False}'
-    ...  Click Element  ${xpath_add_static_ip}
-
-    Input Text  ${xpath_static_input_ip0}  ${OPENBMC_HOST}
-
-
-Verify System Section In Network Setting page
-    [Documentation]  Verify hostname, MAC address and default gateway
-    ...  under system section of network setting page.
-    [Tags]  Verify_System_Section
-
-    ${host_name}=  Redfish_Utils.Get Attribute  ${REDFISH_NW_PROTOCOL_URI}  HostName
-    Textfield Value Should Be  ${xpath_hostname_input}  ${host_name}
-
-    ${mac_address}=  Get BMC MAC Address
-    Textfield Value Should Be   ${xpath_mac_address_input}  ${mac_address}
-
-    ${default_gateway}=  Get BMC Default Gateway
-    Textfield Value Should Be  ${xpath_default_gateway_input}  ${default_gateway}
-
-
-Verify Network Interface Details
-    [Documentation]  Verify network interface name in network setting page.
-    [Tags]  Verify_Network_Interface_Details
-
-    ${active_channel_config}=  Get Active Channel Config
-    ${ethernet_interface_redfish}=  Set Variable  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
-    ${ethernet_interface_gui}=  Get Text  ${xpath_network_interface}
-    Should Contain  ${ethernet_interface_gui}  ${ethernet_interface_redfish}
-
-
-Verify Network Static IPv4 Details
-    [Documentation]  Verify network static IPv4 details.
-    [Tags]  Verify_Network_static_IPv4_Details
-
-    @{network_configurations}=  Get Network Configuration
-    ${ip_addresses}=  Get Static IPv4 Addresses From GUI
-    FOR  ${network_configuration}  IN  @{network_configurations}
-      List Should Contain Value  ${ip_addresses}  ${network_configuration["Address"]}
-    END
-
-
-Configure Invalid Network Addresses And Verify
-    [Documentation]  Configure invalid network addresses and verify.
-    [Tags]  Configure_Invalid_Network_Addresses_And_Verify
-    [Template]  Configure Invalid Network Address And Verify
-
-    # locator                        invalid_address
-    ${xpath_mac_address_input}       A.A.A.A
-    ${xpath_default_gateway_input}   a.b.c.d
-    ${xpath_static_input_ip0}        a.b.c.d
-    ${xpath_input_netmask_addr0}     255.256.255.0
-
-
-Configure And Verify Empty Network Addresses
-    [Documentation]  Configure and verify empty network addresses.
-    [Tags]  Configure_And_Verify_Empty_Network_Addresses
-    [Template]  Configure Invalid Network Address And Verify
-
-    # locator                       invalid_address  expected_error
-    ${xpath_mac_address_input}        ${empty}       Field required
-    ${xpath_default_gateway_input}    ${empty}       Field required
-    ${xpath_static_input_ip0}         ${empty}       Field required
-    ${xpath_input_netmask_addr0}      ${empty}       Field required
-    ${xpath_hostname_input}           ${empty}       Field required
-
-
-Config And Verify DNS Server Via GUI
-    [Documentation]  Configure DNS server and verify.
-    [Tags]  Config_And_Verify_DNS_Server_Via_GUI
-    [Setup]   DNS Test Setup Execution
-    [Teardown]   Run Keywords  Delete DNS Server And Verify  ${static_name_servers}
-    ...  AND  DNS Test Teardown Execution
-
-    Add DNS Server And Verify  ${static_name_servers}
-
-
-Delete And Verify DNS Server Via GUI
-    [Documentation]  Delete DNS server and verify.
-    [Tags]  Delete_And_Verify_DNS_Server_Via_GUI
-    [Setup]   Run Keywords  DNS Test Setup Execution  AND
-    ...  Add DNS Server And Verify  ${static_name_servers}
-    [Teardown]  DNS Test Teardown Execution
-
-    Delete DNS Server And Verify  ${static_name_servers}
-
-Configure And Verify Static IP Address
-    [Documentation]  Configure and verify static ip addresses.
-    [Tags]  Configure_And_Verify_Static_IP_Address
-    [Teardown]  Delete And Verify Static IP Address On BMC  ${test_ipv4_addr}
-
-    Add Static IP Address And Verify  ${test_ipv4_addr}  ${test_subnet_mask}
-
-
-Configure And Verify Invalid DNS Server
-    [Documentation]  Configure invalid DNS server and verify error.
-    [Tags]  Configure_And_Verify_Invalid_DNS_Server
-    [Template]  Add DNS Server And Verify
-    [Setup]  DNS Test Setup Execution
-    [Teardown]  Run Keywords  Click Element  ${xpath_refresh_button}
-    ...  AND  DNS Test Teardown Execution
-
-    # invalid_ address      expected_status
-    ${string_value}         Invalid format
-    ${special_char_value}   Invalid format
-    ${empty_dictionary}     Field required
-    ${null_value}           Invalid format
-
-Modify IP Address And Verify
-    [Documentation]  Modify IP address and verify.
-    [Tags]  Modify_IP_Address_And_Verify
-    [Teardown]  Delete And Verify Static IP Address On BMC  ${test_ipv4_addr2}
-
-    Add Static IP Address And Verify  ${test_ipv4_addr}  ${test_subnet_mask}
-    Update IP Address And Verify  ${test_ipv4_addr}  ${test_ipv4_addr2}
-
-
-Configure Netmask And Verify
-    [Documentation]  Configure and verify netmask.
-    [Tags]  Configure_And_Verify_Netmask
-    [Template]  Add Static IP Address And Verify
-    [Teardown]  Run Keywords  Click Element  ${xpath_refresh_button}
-    ...  AND  Delete And Verify Static IP Address On BMC  ${test_ipv4_addr}
-
-    # ip_addresses      subnet_masks             expected_status
-    ${test_ipv4_addr}   ${lowest_netmask}        Valid format
-    ${test_ipv4_addr}   ${more_byte_netmask}     Invalid format
-    ${test_ipv4_addr}   ${alpha_netmask}         Invalid format
-    ${test_ipv4_addr}   ${out_of_range_netmask}  Invalid format
-
-
-Configure Hostname And Verify
-    [Documentation]  Configure hostname and verify.
-    [Tags]  Configure_Hostname_And_Verify
-    [Teardown]  Configure And Verify Network Settings
-    ...  ${xpath_hostname_input}  ${hostname}
-
-    ${hostname}=  Get Value  ${xpath_hostname_input}
-    Configure And Verify Network Settings  ${xpath_hostname_input}  ${test_hostname}
+    Page Should Contain Button  ${xpath_add_static_ipv4_address_button}
+    Page Should Contain Button  ${xpath_add_dns_ip_address_button}
+    Page Should Contain Button  ${xpath_domain_name_toggle}
+    Page Should Contain Button  ${xpath_dns_servers_toggle}
+    Page Should Contain Button  ${xpath_ntp_servers_toggle}
 
 
 *** Keywords ***
 
 Suite Setup Execution
-   [Documentation]  Do test case setup tasks.
+    [Documentation]  Do suite setup tasks.
 
     Launch Browser And Login GUI
     Click Element  ${xpath_settings_menu}
     Click Element  ${xpath_network_sub_menu}
     Wait Until Keyword Succeeds  30 sec  10 sec  Location Should Contain  network
-    ${host_name}  ${BMC_IP}=  Get Host Name IP  host=${OPENBMC_HOST}
-    Set Suite Variable  ${BMC_IP}
-
-
-Configure Invalid Network Address And Verify
-    [Documentation]  Configure invalid network address And verify.
-    [Arguments]  ${locator}  ${invalid_address}  ${expected_error}=Invalid format
-    [Teardown]  Click Element  ${xpath_refresh_button}
-
-    # Description of the argument(s):
-    # locator            Xpath to identify an HTML element on a web page.
-    # invalid_address    Invalid address to be added.
-    # expected_error     Expected error optionally provided in testcase
-    # ....               (e.g. Invalid format / Field required)
-
-    Wait Until Element Is Enabled  ${locator}
-    Clear Element Text  ${locator}
-    Input Text  ${locator}  ${invalid_address}
-    Click Element  ${xpath_network_save_settings}
-    Page Should Contain  ${expected_error}
-
-
-Add DNS Server And Verify
-    [Documentation]  Add DNS server on BMC and verify it via BMC CLI.
-    [Arguments]  ${static_name_servers}   ${expected_status}=Valid format
-
-    # Description of the argument(s):
-    # static_name_servers  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_server}
-    ${length}=  Get Length   ${static_name_servers}
-    FOR  ${i}  IN RANGE  ${length}
-      Click Button  ${xpath_add_dns_server}
-      Input Text  //*[@data-test-id="network-input-dnsAddress-${i}"]
-      ...  ${static_name_servers}[${i}]
-    END
-
-    Click Button  ${xpath_network_save_settings}
-    Run keyword if  '${expected_status}' != 'Valid format'
-    ...  Run keywords  Page Should Contain  ${expected_status}  AND  Return From Keyword
-
-    Wait Until Page Contains Element  ${xpath_setting_success}  timeout=15
-    Sleep  ${NETWORK_TIMEOUT}s
-    Verify Static Name Server Details On GUI  ${static_name_servers}
-    # Check if newly added DNS server is configured on BMC.
-    ${cli_name_servers}=  CLI Get Nameservers
-    List Should Contain Sub List  ${cli_name_servers}  ${static_name_servers}
-
-
-Delete DNS Server And Verify
-    [Documentation]  Delete static name servers.
-    [Arguments]  ${static_name_servers}
-
-    # Description of the argument(s):
-    # static_name_servers  A list of static name server IPs to be
-    #                      configured on the BMC.
-
-    ${length}=  Get Length  ${static_name_servers}
-    FOR  ${i}  IN RANGE   ${length}
-       ${status}=  Run Keyword And Return Status
-       ...  Page Should Contain Element  ${xpath_delete_dns_server}
-       Exit For Loop If   "${status}" == "False"
-       Wait Until Element Is Enabled  ${xpath_delete_dns_server}
-       Click Button  ${xpath_delete_dns_server}
-    END
-
-    Click Button  ${xpath_network_save_settings}
-    Wait Until Page Contains Element  ${xpath_setting_success}  timeout=15
-
-    Sleep  ${NETWORK_TIMEOUT}s
-    Page Should Not Contain Element  ${xpath_input_dns_server}
-    # Check if all name servers deleted on BMC.
-    ${nameservers}=  CLI Get Nameservers
-    Should Be Empty  ${nameservers}
-
-
-DNS Test Setup Execution
-    [Documentation]  Do DNS test setup execution.
-
-    ${original_name_server}=  CLI Get Nameservers
-    Set Suite Variable   ${original_name_server}
-    Run Keyword If  ${original_name_server} != @{EMPTY}
-    ...  Delete DNS Server And Verify  ${original_name_server}
-
-
-DNS Test Teardown Execution
-    [Documentation]  Do DNS test teardown execution.
-
-    Run Keyword If  ${original_name_server} != @{EMPTY}
-    ...  Add DNS Server And Verify  ${original_name_server}
-
-
-Verify Static Name Server Details On GUI
-    [Documentation]  Verify static name servers on GUI.
-    [Arguments]   ${static_name_servers}
-
-    # Description of the argument(s):
-    # static_name_servers  A list of static name server IPs to be
-    #                      configured on the BMC.
-
-    ${length}=  Get Length  ${static_name_servers}
-    FOR  ${i}  IN RANGE  ${length}
-       Page Should Contain Element  //*[@data-test-id="network-input-dnsAddress-${i}"]
-       Textfield Value Should Be   //*[@data-test-id="network-input-dnsAddress-${i}"]
-       ...  ${static_name_servers}[${i}]
-    END
-
-Add Static IP Address And Verify
-    [Documentation]  Add static IP on BMC and verify.
-    [Arguments]  ${ip_address}  ${subnet_mask}  ${expected_status}=Valid format
-
-    # Description of argument(s):
-    # ip_address          IP address to be added (e.g. 10.7.7.7).
-    # subnet_masks        Subnet mask for the IP to be added (e.g. 255.255.0.0).
-    # expected_status     Expected status while adding static ipv4 address
-    # ....                (e.g. Invalid format / Field required).
-
-    ${available_ip_addresses}=  Get Static IPv4 Addresses From GUI
-
-    # New IP address location is GUI is equivalent to the available IP address
-    # in Redfish. i.e. if two IP address are available in GUI then location
-    # on IP address in GUI is also 2.
-    ${location}=  Get Length  ${available_ip_addresses}
-    Wait Until Element Is Enabled  ${xpath_add_static_ip}
-    Click Button  ${xpath_add_static_ip}
-
-    Input Text
-    ...  //*[@data-test-id="network-input-staticIpv4-${location}"]  ${ip_address}
-    Input Text
-    ...  //*[@data-test-id="network-input-subnetMask-${location}"]  ${subnet_mask}
-
-    Click Button  ${xpath_network_save_settings}
-    Run keyword if  '${expected_status}' != 'Valid format'
-    ...  Run keywords  Page Should Contain  ${expected_status}  AND  Return From Keyword
-    Wait Until Page Contains Element  ${xpath_setting_success}  timeout=15
-    Click Element  ${xpath_refresh_button}
-    Wait Until Page Contains Element  ${xpath_static_input_ip0}
-    Validate Network Config On BMC
-    ${ip_addresses}=  Get Static IPv4 Addresses From GUI
-    Should Contain  ${ip_addresses}  ${ip_address}
-
-
-Delete And Verify Static IP Address On BMC
-    [Documentation]  Delete static IP address and verify
-    [Arguments]  ${ip_address}
-
-    # Description of argument(s):
-    # ip_address       IP address to be deleted (e.g. "10.7.7.7").
-
-    ${ip_addresses}=  Get Static IPv4 Addresses From GUI
-    Should Contain  ${ip_addresses}  ${ip_address}  msg=${ip_address} does not exist on BMC
-
-    ${delete_ip_buttons}=  Get WebElements  ${xpath_delete_static_ip}
-    FOR  ${location}  IN RANGE  len(${ip_addresses})
-       ${gui_ip}=  Get Value  //*[@data-test-id="network-input-staticIpv4-${location}"]
-       Run Keyword If  '${gui_ip}' == '${ip_address}' and '${gui_ip}' != '${BMC_IP}'
-       ...  Run Keywords  Click Element  ${delete_ip_buttons}[${location}]
-       ...  AND  Exit For Loop
-    END
-
-    Click Button  ${xpath_network_save_settings}
-    Wait Until Page Contains Element  ${xpath_setting_success}  timeout=15
-    Wait Until Page Contains Element  ${xpath_static_input_ip0}
-    Validate Network Config On BMC
-    ${ip_addresses}=  Get Static IPv4 Addresses From GUI
-    Should Not Contain  ${ip_addresses}  ${ip_address}
-
-
-Update IP Address And Verify
-    [Documentation]  Update and verify static IP address on BMC.
-    [Arguments]  ${ip}  ${new_ip}
-
-    # Description of argument(s):
-    # ip                  IP address to be replaced (e.g. "10.7.7.7").
-    # new_ip              New IP address to be configured.
-
-    ${ip_addresses}=  Get Static IPv4 Addresses From GUI
-    Should Contain  ${ip_addresses}  ${ip}  msg=${ip} does not exist on BMC
-
-    FOR  ${location}  IN RANGE  len(${ip_addresses})
-       ${gui_ip}=  Get Value  //*[@data-test-id="network-input-staticIpv4-${location}"]
-       Run Keyword If  '${gui_ip}' == '${ip}'
-       ...  Run Keywords
-       ...  Clear Element Text  //*[@data-test-id="network-input-staticIpv4-${location}"]
-       ...  AND  Input Text
-       ...  //*[@data-test-id="network-input-staticIpv4-${location}"]  ${new_ip}
-       ...  AND  Exit For Loop
-    END
-    Click Button  ${xpath_network_save_settings}
-    Wait Until Page Contains Element  ${xpath_setting_success}  timeout=15
-    Click Element  ${xpath_refresh_button}
-    Wait Until Page Contains Element  ${xpath_static_input_ip0}
-    Validate Network Config On BMC
-    ${ip_addresses}=  Get Static IPv4 Addresses From GUI
-    Should Contain  ${ip_addresses}  ${new_ip}
-
-
-Get Static IPv4 Addresses From GUI
-    [Documentation]  Get static IPV4 addresses from GUI.
-
-    ${availble_ip_addresses}=  Get Network Configuration
-    ${static_ipv4_addresses}=  Create List
-
-    FOR   ${locator}   IN RANGE  len(${availble_ip_addresses})
-       ${ip_address}=  Get value  //*[@data-test-id="network-input-staticIpv4-${locator}"]
-       Append To List  ${static_ipv4_addresses}  ${ip_address}
-    END
-
-    [Return]  ${static_ipv4_addresses}
-
-
-Configure And Verify Network Settings
-    [Documentation]  Configure and verify network settings.
-    [Arguments]  ${xpath}  ${nw_settings}
-
-    # Description of argument(s):
-    # xpath  xpath of the network settings.
-    # nw_settings  The mac address, hostname etc.
-
-    Wait Until Element Is Enabled  ${xpath}
-    Input Text  ${xpath}  ${nw_settings}
-    Click Button  ${xpath_network_save_settings}
-    Wait Until Page Contains Element  ${xpath_setting_success}  timeout=10
-    Textfield Value Should Be  ${xpath}  ${nw_settings}
-
