MDL-70727 Behat: function scrollIntoView not working in the app
authorThinh Pham <thinh.tien@open.ac.uk>
Tue, 2 Mar 2021 06:34:53 +0000 (13:34 +0700)
committerThinh Pham <thinh.tien@open.ac.uk>
Thu, 4 Mar 2021 04:53:17 +0000 (11:53 +0700)
lib/tests/behat/app_behat_runtime.js

index 56fdbc3..182e5c1 100644 (file)
         return 'OK';
     };
 
+    /**
+     * Get main navigation controller.
+     *
+     * @return {Object} main navigation controller.
+     */
+    var getNavCtrl = function() {
+        var mainNav = window.appProvider.appCtrl.getRootNavs()[0].getActiveChildNav();
+        if (mainNav && mainNav.tabsIds.length && mainNav.firstSelectedTab) {
+            var tabPos = mainNav.tabsIds.indexOf(mainNav.firstSelectedTab);
+            if (tabPos !== -1 && mainNav._tabs && mainNav._tabs.length > tabPos) {
+                return mainNav._tabs[tabPos];
+            }
+        }
+        // Fallback to return main nav - this will work but will overlay current tab.
+        return window.appProvider.appCtrl.getRootNavs()[0];
+    };
+
     /**
      * Function to press arbitrary item based on its text or Aria label.
      *
             return 'ERROR: ' + error.message;
         }
 
-        // Simulate a mouse click on the button.
-        found.scrollIntoView();
+        var mainContent = getNavCtrl().getActive()._cntDir;
         var rect = found.getBoundingClientRect();
+
+        // Scroll the item into view.
+        mainContent.scrollTo(rect.x, rect.y);
+
+        // Simulate a mouse click on the button.
         var eventOptions = {clientX: rect.left + rect.width / 2, clientY: rect.top + rect.height / 2,
                 bubbles: true, view: window, cancelable: true};
         setTimeout(function() {