diff --git a/app/code/Magento/AdminNotification/Ui/Component/DataProvider/DataProvider.php b/app/code/Magento/AdminNotification/Ui/Component/DataProvider/DataProvider.php
new file mode 100644
index 0000000000000000000000000000000000000000..296fcf5c461ad4521fed496e376ed9289f50cf0c
--- /dev/null
+++ b/app/code/Magento/AdminNotification/Ui/Component/DataProvider/DataProvider.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\AdminNotification\Ui\Component\DataProvider;
+
+use Magento\AdminNotification\Model\ResourceModel\System\Message\Collection\SynchronizedFactory;
+
+/**
+ * Class DataProvider
+ */
+class DataProvider extends \Magento\Ui\DataProvider\AbstractDataProvider
+{
+    /**
+     * DataProvider constructor.
+     * @param string $name
+     * @param string $primaryFieldName
+     * @param string $requestFieldName
+     * @param SynchronizedFactory $messageCollectionFactory
+     * @param array $meta
+     * @param array $data
+     */
+    public function __construct(
+        $name,
+        $primaryFieldName,
+        $requestFieldName,
+        SynchronizedFactory $messageCollectionFactory,
+        array $meta = [],
+        array $data = []
+    ) {
+        $this->collection = $messageCollectionFactory->create();
+        parent::__construct($name, $primaryFieldName, $requestFieldName, $meta, $data);
+    }
+}
diff --git a/app/code/Magento/AdminNotification/composer.json b/app/code/Magento/AdminNotification/composer.json
index 0a29908b77f6f4f6511fe5671702217ef95ceb90..527268df36b41efe5078528138342a03fa33745d 100644
--- a/app/code/Magento/AdminNotification/composer.json
+++ b/app/code/Magento/AdminNotification/composer.json
@@ -7,6 +7,7 @@
         "magento/module-backend": "100.2.*",
         "magento/module-media-storage": "100.2.*",
         "magento/framework": "100.2.*",
+        "magento/module-ui": "100.2.*",
         "lib-libxml": "*"
     },
     "type": "magento2-module",
diff --git a/app/code/Magento/AdminNotification/view/adminhtml/layout/default.xml b/app/code/Magento/AdminNotification/view/adminhtml/layout/default.xml
index e3d32f17b6356bc974627b0daaba5dca5c467eea..780e48378a3a4069c29b50153eb6ca013f36147e 100644
--- a/app/code/Magento/AdminNotification/view/adminhtml/layout/default.xml
+++ b/app/code/Magento/AdminNotification/view/adminhtml/layout/default.xml
@@ -8,11 +8,7 @@
 <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
     <body>
         <referenceContainer name="notifications">
-            <block class="Magento\AdminNotification\Block\System\Messages"
-                   name="system_messages"
-                   as="system_messages"
-                   before="-"
-                   template="Magento_AdminNotification::system/messages.phtml"/>
+            <uiComponent name="notification_area"/>
             <block class="Magento\AdminNotification\Block\System\Messages\UnreadMessagePopup"
                    name="unread_system_messages"
                    as="unread_system_messages"
diff --git a/app/code/Magento/AdminNotification/view/adminhtml/ui_component/notification_area.xml b/app/code/Magento/AdminNotification/view/adminhtml/ui_component/notification_area.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e0149fff714deaa5fc95910169ec92a26e4c673c
--- /dev/null
+++ b/app/code/Magento/AdminNotification/view/adminhtml/ui_component/notification_area.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
+    <argument name="data" xsi:type="array">
+        <item name="js_config" xsi:type="array">
+            <item name="provider" xsi:type="string">notification_area.notification_area_data_source</item>
+            <item name="deps" xsi:type="string">notification_area.notification_area_data_source</item>
+        </item>
+        <item name="spinner" xsi:type="string">columns</item>
+    </argument>
+    <dataSource name="notification_area_data_source">
+        <argument name="dataProvider" xsi:type="configurableObject">
+            <argument name="class" xsi:type="string">Magento\AdminNotification\Ui\Component\DataProvider\DataProvider</argument>
+            <argument name="name" xsi:type="string">notification_area_data_source</argument>
+            <argument name="primaryFieldName" xsi:type="string">identity</argument>
+            <argument name="requestFieldName" xsi:type="string">identity</argument>
+            <argument name="data" xsi:type="array">
+                <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/provider</item>
+                    <item name="update_url" xsi:type="url" path="mui/index/render"/>
+                    <item name="storageConfig" xsi:type="array">
+                        <item name="indexField" xsi:type="string">identity</item>
+                    </item>
+                </item>
+            </argument>
+        </argument>
+    </dataSource>
+    <columns name="columns">
+        <argument name="data" xsi:type="array">
+            <item name="config" xsi:type="array">
+                <item name="component" xsi:type="string">Magento_AdminNotification/js/grid/listing</item>
+                <item name="template" xsi:type="string">Magento_AdminNotification/grid/listing</item>
+            </item>
+        </argument>
+        <column name="created_at">
+            <argument name="data" xsi:type="array">
+                <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_AdminNotification/js/grid/columns/message</item>
+                    <item name="label" xsi:type="string" translate="true"/>
+                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="sorting" xsi:type="string">asc</item>
+                    <item name="sortOrder" xsi:type="number">30</item>
+                </item>
+            </argument>
+        </column>
+    </columns>
+</listing>
diff --git a/app/code/Magento/AdminNotification/view/adminhtml/web/js/grid/columns/message.js b/app/code/Magento/AdminNotification/view/adminhtml/web/js/grid/columns/message.js
new file mode 100644
index 0000000000000000000000000000000000000000..aa5477ebafcf0df511981f2f874c7a1e4c7081bb
--- /dev/null
+++ b/app/code/Magento/AdminNotification/view/adminhtml/web/js/grid/columns/message.js
@@ -0,0 +1,46 @@
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define([
+    'Magento_Ui/js/grid/columns/column',
+    'underscore'
+], function (Column, _) {
+    'use strict';
+
+    return Column.extend({
+        defaults: {
+            bodyTmpl: 'Magento_AdminNotification/grid/cells/message',
+            messageIndex: 'text',
+            fieldClass: {
+                message: true,
+                'message-warning': false,
+                'message-progress': false,
+                'message-success': false,
+                'message-error': false
+            },
+            statusMap: {
+                0: 'info',
+                1: 'progress',
+                2: 'success',
+                3: 'error'
+            }
+        },
+
+        /** @inheritdoc */
+        getLabel: function (record) {
+            return record[this.messageIndex];
+        },
+
+        /** @inheritdoc */
+        getFieldClass: function ($row) {
+            var status = this.statusMap[$row.status] || 'warning',
+                result = {};
+
+            result['message-' + status] = true;
+            result = _.extend({}, this.fieldClass, result);
+
+            return result;
+        }
+    });
+});
diff --git a/app/code/Magento/AdminNotification/view/adminhtml/web/js/grid/listing.js b/app/code/Magento/AdminNotification/view/adminhtml/web/js/grid/listing.js
new file mode 100644
index 0000000000000000000000000000000000000000..1fbda8d0196ca1fa9e1b58f40d0804892bf70891
--- /dev/null
+++ b/app/code/Magento/AdminNotification/view/adminhtml/web/js/grid/listing.js
@@ -0,0 +1,63 @@
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+define([
+    'Magento_Ui/js/grid/listing',
+    'Magento_Ui/js/lib/spinner',
+    'jquery'
+], function (Listing, loader, $) {
+    'use strict';
+
+    return Listing.extend({
+        defaults: {
+            imports: {
+                totalRecords: '${ $.provider }:data.totalRecords'
+            },
+            selectors: {
+                collapsible: '.message-system-collapsible',
+                messages: '.message-system'
+            }
+        },
+
+        /** @inheritdoc */
+        initObservable: function () {
+            this._super()
+                .track({
+                    totalRecords: 0
+                });
+
+            return this;
+        },
+
+        /** @inheritdoc */
+        showLoader: function () {
+            if (!this.source.firstLoad) {
+                this.fixLoaderHeight();
+                this._super();
+            }
+        },
+
+        /**
+         * Calculates loader height
+         *
+         * @param {Boolean} [closed]
+         */
+        fixLoaderHeight: function (closed) {
+            var $messagesBlock = $(this.selectors.messages),
+                $collapsibleBlock = $(this.selectors.collapsible),
+                resultHeight = 0;
+
+            if ($messagesBlock.length) {
+                resultHeight += $messagesBlock.outerHeight();
+            }
+
+            if ($collapsibleBlock.length && $collapsibleBlock.is(':visible') && !closed) {
+                resultHeight += $collapsibleBlock.outerHeight();
+            }
+
+            loader.get(this.name).height(resultHeight);
+        }
+    });
+});
diff --git a/app/code/Magento/AdminNotification/view/adminhtml/web/template/grid/cells/message.html b/app/code/Magento/AdminNotification/view/adminhtml/web/template/grid/cells/message.html
new file mode 100644
index 0000000000000000000000000000000000000000..869842e8ee87bcc9465d3763dc610c95361cad72
--- /dev/null
+++ b/app/code/Magento/AdminNotification/view/adminhtml/web/template/grid/cells/message.html
@@ -0,0 +1,8 @@
+<!--
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<div css="$col.getFieldClass($row())"
+     html="$col.getLabel($row())"/>
\ No newline at end of file
diff --git a/app/code/Magento/AdminNotification/view/adminhtml/web/template/grid/listing.html b/app/code/Magento/AdminNotification/view/adminhtml/web/template/grid/listing.html
new file mode 100644
index 0000000000000000000000000000000000000000..80f2f4f2423fbcad5ba9b8e030e56c806db5ef9a
--- /dev/null
+++ b/app/code/Magento/AdminNotification/view/adminhtml/web/template/grid/listing.html
@@ -0,0 +1,32 @@
+<!--
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<div id="system_messages" class="message-system" collapsible visible="totalRecords">
+    <div class="message-system-inner" outerClick="fixLoaderHeight.bind($data, true)">
+        <div class="message-system-short">
+            <button class="message-system-action-dropdown" toggleCollapsible>
+                <span>
+                    <translate args="'System Messages'"/>:
+                    <text args="totalRecords"/>
+                </span>
+            </button>
+            <div class="message-system-short-wrapper" if="rows[0]" repeat="foreach: [rows[0]], item: '$row'" visible="!$collapsible.opened()">
+                <fastForEach args="data: getVisible(), as: '$col'" >
+                    <render args="$col.getBody()"/>
+                </fastForEach>
+            </div>
+        </div>
+        <div class="message-system-collapsible">
+            <ul class="message-system-list">
+                <li repeat="foreach: rows, item: '$row'">
+                    <fastForEach args="data: getVisible(), as: '$col'" >
+                        <render args="$col.getBody()"/>
+                    </fastForEach>
+                </li>
+            </ul>
+        </div>
+    </div>
+</div>
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/validation/validator.js b/app/code/Magento/Ui/view/base/web/js/lib/validation/validator.js
index 764b11dfbfea202bf40c8e631fdbcfdc0da1285e..7823871fd694c362912e0479a408d7befcf25450 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/validation/validator.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/validation/validator.js
@@ -27,12 +27,16 @@ define([
                 message: ''
             };
 
+        if (_.isObject(params)) {
+            message = params.message || '';
+        }
+
         if (!rulesList[id]) {
             return result;
         }
 
         rule    = rulesList[id];
-        message = rule.message;
+        message = message || rule.message;
         valid   = rule.handler(value, params, additionalParams);
 
         if (!valid) {
@@ -68,7 +72,7 @@ define([
             };
 
             _.every(rules, function (ruleParams, id) {
-                if (ruleParams !== false || additionalParams) {
+                if (ruleParams.validate || ruleParams !== false || additionalParams) {
                     result = validate(id, value, ruleParams, additionalParams);
 
                     return result.passed;
diff --git a/app/design/adminhtml/Magento/backend/Magento_AdminNotification/web/css/source/_module.less b/app/design/adminhtml/Magento/backend/Magento_AdminNotification/web/css/source/_module.less
index 585269e14d685dd8bc3e2f4ebcd90e1b500881da..bdb94e3a8202f9dc0142d5e81c5d6941e1567835 100644
--- a/app/design/adminhtml/Magento/backend/Magento_AdminNotification/web/css/source/_module.less
+++ b/app/design/adminhtml/Magento/backend/Magento_AdminNotification/web/css/source/_module.less
@@ -8,7 +8,16 @@
 //  _____________________________________________
 
 @message-system__background-color: @color-lazy-sun;
-@message-system-short-message__padding-vertical: 1.8rem;
+@message-system__border-color: @color-gray82;
+@message-system__border-width: .1rem;
+@message-system__color: @color-gray20;
+@message-system-short__padding-vertical: 1.5rem;
+@message-system-short-wrapper__height: 5rem;
+
+//  Triangle marker
+@message-system-triangle__height: .5rem;
+@message-system-triangle__padding-right: 3rem;
+@message-system-triangle__width: .8rem;
 
 //
 //  Message system
@@ -17,34 +26,124 @@
 .message-system-inner {
     &:extend(.abs-clearfix all);
     background: @message-system__background-color;
+    border: solid @message-system__border-color;
+    border-width: 0 @message-system__border-width @message-system__border-width;
+    position: relative;
+
+    .message-error {
+        background: none;
+    }
+
+    .message {
+        background: none;
+        margin: 0 0 -3px;
+        overflow: hidden;
+        padding: @message-system-short__padding-vertical 0 @message-system-short__padding-vertical 3.3rem;
+
+        &:before {
+            left: .3rem;
+        }
+    }
 
-    .message-system-list {
-        float: left;
-        width: 75%;
+    .action-menu-item {
+        &.action-close-wrapper {
+            width: 3.5rem;
+        }
+
+        .action-close {
+            float: right;
+        }
+
+        float: right;
+        padding: @message-system-short__padding-vertical 0 0;
+        vertical-align: top;
     }
 }
 
 .message-system-list {
+    border-bottom: 1px solid @message-system__border-color;
+    border-top: 1px solid @message-system__border-color;
     list-style: none;
-    margin: 0;
-    padding: 0;
+    margin: 0 0 1.5rem;
+
+    li {
+        + li {
+            border-top: 1px dashed @message-system__border-color;
+        }
+    }
 }
 
 .message-system-short {
+    min-height: @message-system-short-wrapper__height;
+
+    .action-close-wrapper {
+        display: none;
+    }
+}
+
+.message-system-short-wrapper {
     overflow: hidden;
-    text-align: right;
+    padding: 0 1.5rem 0 @indent__l;
+}
 
-    .message-system-short-label {
-        display: inline-block;
-        padding: @message-system-short-message__padding-vertical .3rem @message-system-short-message__padding-vertical 1rem;
+.message-system-collapsible {
+    background: @message-system__background-color;
+    border: @message-system__border-width solid @message-system__border-color;
+    border-top: 0;
+    display: none;
+    left: -1px;
+    padding: 0 @indent__l @message-system-short__padding-vertical;
+    position: absolute;
+    right: -1px;
+    top: 100%;
+    z-index: @z-index-5 - 2;
+
+    ._active & {
+        display: block;
     }
+}
 
-    .message {
+.message-system-action-dropdown {
+    .lib-button-reset();
+    float: right;
+    margin: @message-system-short__padding-vertical 0;
+    position: relative;
+
+    .action-toggle-triangle (
+        @_dropdown__padding-right: @message-system-triangle__padding-right;
+        @_triangle__height: @message-system-triangle__height;
+        @_triangle__width: @message-system-triangle__width;
+        @_triangle__color: @message-system__color;
+        @_triangle__hover__color: darken(@message-system__color, 10%);
+        @_triangle__right: (@message-system-triangle__padding-right / 2) - (@message-system-triangle__width/ 2);
+    );
+}
+
+.message-system-summary {
+    text-align: right;
+
+    .action__message-log {
+        border-right: 1px solid @message-system__border-color;
         display: inline-block;
-        padding: @message-system-short-message__padding-vertical 2rem @message-system-short-message__padding-vertical 3.3rem;
+        margin: 0 .2rem 0 @indent__xs;
+        padding-right: @indent__xs;
 
-        &:before {
-            left: .3rem;
+        &:last-child {
+            border-right: 0;
+            margin: 0;
+            padding: 0;
         }
     }
 }
+
+.notices-wrapper {
+    .admin__data-grid-loading-mask {
+        display: none;
+        min-height: @message-system-short-wrapper__height + @message-system__border-width;
+        z-index: @z-index-5 - 1;
+    }
+
+    .admin__data-grid-outer-wrap {
+        min-height: 0;
+    }
+}
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_messages.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_messages.less
index 9d9a4cab990477f594601edefce714b2e1ad90ef..e955affe3fb4394a9daa38eeba643b64d8c1e658 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/components/_messages.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_messages.less
@@ -28,6 +28,9 @@
 @alert-icon__warning__content: @icon-warning__content;
 @alert-icon__warning__color: @color-phoenix;
 
+@alert-icon__progress__content: @icon-refresh__content;
+@alert-icon__progress__color: @color-blue-dodger;
+
 @alert-icon__success__content: @icon-check-mage__content;
 @alert-icon__success__color: @color-green-apple;
 
@@ -93,6 +96,13 @@
     }
 }
 
+.message-progress {
+    &:before {
+        color: @alert-icon__progress__color;
+        content: @alert-icon__progress__content;
+    }
+}
+
 .message-error {
     background: @alert__error__background-color;
 
@@ -128,4 +138,4 @@
 .message-in-rating-edit {
     margin-left: 1.8rem;
     margin-right: 1.8rem;
-}
+}
\ No newline at end of file
diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/Page/Adminhtml/BraintreeSettlementReport.xml b/dev/tests/functional/tests/app/Magento/Braintree/Test/Page/Adminhtml/BraintreeSettlementReport.xml
index 20359c41bd55fb148c4dd407a0b75c4e2cda8f93..bd2a0e60b20ab032b034a2930f1bd1e24f54f7fc 100644
--- a/dev/tests/functional/tests/app/Magento/Braintree/Test/Page/Adminhtml/BraintreeSettlementReport.xml
+++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/Page/Adminhtml/BraintreeSettlementReport.xml
@@ -7,6 +7,6 @@
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
     <page name="BraintreeSettlementReportIndex" area="Adminhtml" mca="braintree/report/index" module="Magento_Braintree">
-        <block name="settlementReportGrid" class="Magento\Braintree\Test\Block\Adminhtml\Report\Grid" locator=".admin__data-grid-outer-wrap" strategy="css selector"/>
+        <block name="settlementReportGrid" class="Magento\Braintree\Test\Block\Adminhtml\Report\Grid" locator="//div[contains(@data-bind, 'braintree_report')]" strategy="xpath"/>
     </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductIndex.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductIndex.xml
index a1de0d5599564a5693604efea577ae2a14e0d76e..c6a125bfd4ed236e4c8a6db38f6bfd7fb11a3e85 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductIndex.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductIndex.xml
@@ -7,7 +7,7 @@
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
     <page name="CatalogProductIndex" area="Adminhtml" mca="catalog/product/index" module="Magento_Catalog">
-        <block name="productGrid" class="Magento\Catalog\Test\Block\Adminhtml\Product\Grid" locator=".admin__data-grid-outer-wrap" strategy="css selector"/>
+        <block name="productGrid" class="Magento\Catalog\Test\Block\Adminhtml\Product\Grid" locator="//div[contains(@data-bind, 'product_listing')]" strategy="xpath"/>
         <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
         <block name="gridPageActionBlock" class="Magento\Catalog\Test\Block\Adminhtml\Product\GridPageAction" locator="#add_new_product" strategy="css selector"/>
     </page>
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsBlockIndex.xml b/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsBlockIndex.xml
index e23472508e83a83ca56d6e738bed43f3ca65bd88..c369a950df315087b09ff9528aa9c9227d258d18 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsBlockIndex.xml
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsBlockIndex.xml
@@ -9,6 +9,6 @@
     <page name="CmsBlockIndex" area="Adminhtml" mca="cms/block/index" module="Magento_Cms">
         <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator=".messages .message" strategy="css selector" />
         <block name="gridPageActions" class="Magento\Backend\Test\Block\GridPageActions" locator=".page-main-actions" strategy="css selector" />
-        <block name="cmsBlockGrid" class="Magento\Cms\Test\Block\Adminhtml\Block\CmsGrid" locator=".admin__data-grid-outer-wrap" strategy="css selector" />
+        <block name="cmsBlockGrid" class="Magento\Cms\Test\Block\Adminhtml\Block\CmsGrid" locator="//div[contains(@data-bind, 'cms_block_listing')]" strategy="xpath" />
     </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsPageIndex.xml b/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsPageIndex.xml
index ed2037cf893a39a14d6eee047f14c69da04f3dea..467d8f8a2ffe8309ef7964d4cdf925ab3544a347 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsPageIndex.xml
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsPageIndex.xml
@@ -8,7 +8,7 @@
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
     <page name="CmsPageIndex" area="Adminhtml" mca="cms/page/index" module="Magento_Cms">
         <block name="pageActionsBlock" class="Magento\Backend\Test\Block\GridPageActions" locator=".page-main-actions" strategy="css selector" />
-        <block name="cmsPageGridBlock" class="Magento\Cms\Test\Block\Adminhtml\Page\Grid" locator=".admin__data-grid-outer-wrap" strategy="css selector" />
+        <block name="cmsPageGridBlock" class="Magento\Cms\Test\Block\Adminhtml\Page\Grid" locator="//div[contains(@data-bind, 'cms_page_listing')]" strategy="xpath" />
         <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator=".messages .message" strategy="css selector" />
     </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerIndex.xml b/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerIndex.xml
index d0247118d2d3b4261da1ba0e288f270f7ebd8ab3..7b908210b6e7f58de28dcf8188da38748b9a6e05 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerIndex.xml
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerIndex.xml
@@ -9,6 +9,6 @@
   <page name="CustomerIndex" area="Adminhtml" mca="customer/index" module="Magento_Customer">
     <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
     <block name="pageActionsBlock" class="Magento\Backend\Test\Block\GridPageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="customerGridBlock" class="Magento\Customer\Test\Block\Adminhtml\CustomerGrid" locator=".admin__data-grid-outer-wrap" strategy="css selector"/>
+    <block name="customerGridBlock" class="Magento\Customer\Test\Block\Adminhtml\CustomerGrid" locator="//div[contains(@data-bind, 'customer_listing')]" strategy="xpath"/>
   </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Page/Adminhtml/OrderIndex.xml b/dev/tests/functional/tests/app/Magento/Sales/Test/Page/Adminhtml/OrderIndex.xml
index 1382f1c2567ddc1aac85673369703e632676bd11..beee22011c69e80d0ab7d20516a2193518ae0371 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Page/Adminhtml/OrderIndex.xml
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Page/Adminhtml/OrderIndex.xml
@@ -8,7 +8,7 @@
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
     <page name="OrderIndex" area="Adminhtml" mca="sales/order/index" module="Magento_Sales">
         <block name="gridPageActions" class="Magento\Backend\Test\Block\GridPageActions" locator=".page-main-actions" strategy="css selector"/>
-        <block name="salesOrderGrid" class="Magento\Sales\Test\Block\Adminhtml\Order\Grid" locator=".admin__data-grid-outer-wrap" strategy="css selector"/>
+        <block name="salesOrderGrid" class="Magento\Sales\Test\Block\Adminhtml\Order\Grid" locator="//div[contains(@data-bind, 'sales_order_grid')]" strategy="xpath"/>
         <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
     </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Search/Test/Page/Adminhtml/SynonymGroupIndex.xml b/dev/tests/functional/tests/app/Magento/Search/Test/Page/Adminhtml/SynonymGroupIndex.xml
index 85cc69ea56584e326ffabd656e694b11a1127681..a979454142f42adf17f8a566de68efd80b083bd6 100644
--- a/dev/tests/functional/tests/app/Magento/Search/Test/Page/Adminhtml/SynonymGroupIndex.xml
+++ b/dev/tests/functional/tests/app/Magento/Search/Test/Page/Adminhtml/SynonymGroupIndex.xml
@@ -9,6 +9,6 @@
     <page name="synonymGroupIndex" area="Adminhtml" mca="search/synonyms/index" module="Magento_Search">
         <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator=".messages .message" strategy="css selector" />
         <block name="gridPageActions" class="Magento\Backend\Test\Block\GridPageActions" locator=".page-main-actions" strategy="css selector" />
-        <block name="synonymGroupGrid" class="Magento\Search\Test\Block\Adminhtml\Block\SynonymGroupGrid" locator=".admin__data-grid-outer-wrap" strategy="css selector" />
+        <block name="synonymGroupGrid" class="Magento\Search\Test\Block\Adminhtml\Block\SynonymGroupGrid" locator="//div[contains(@data-bind, 'search_synonyms_grid')]" strategy="xpath" />
     </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Shipping/Test/Page/Adminhtml/ShipmentIndex.xml b/dev/tests/functional/tests/app/Magento/Shipping/Test/Page/Adminhtml/ShipmentIndex.xml
index 81667dbbcc54dd5bf66c0c600a615d5709a01759..e9d5e1d21175ddb56d016c12af6c89e6c9fd20d0 100644
--- a/dev/tests/functional/tests/app/Magento/Shipping/Test/Page/Adminhtml/ShipmentIndex.xml
+++ b/dev/tests/functional/tests/app/Magento/Shipping/Test/Page/Adminhtml/ShipmentIndex.xml
@@ -7,7 +7,7 @@
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
   <page name="ShipmentIndex" area="Adminhtml" mca="sales/shipment" module="Magento_Shipping">
-    <block name="shipmentsGrid" class="Magento\Shipping\Test\Block\Adminhtml\Shipment\Grid" locator=".admin__data-grid-outer-wrap" strategy="css selector"/>
+    <block name="shipmentsGrid" class="Magento\Shipping\Test\Block\Adminhtml\Shipment\Grid" locator="//div[contains(@data-bind, 'sales_order_shipment_grid')]" strategy="xpath"/>
     <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
   </page>
 </config>