@@ -685,11 +685,11 @@ public void EnhancedNavigationScrollBehavesSameAsBrowserOnNavLinkNavigation(bool
685685 var elementForStalenessCheckOnHashPage = Browser . Exists ( By . TagName ( "html" ) ) ;
686686
687687 var jsExecutor = ( IJavaScriptExecutor ) Browser ;
688- var maxScrollPosition = ( long ) jsExecutor . ExecuteScript ( "return document.documentElement.scrollHeight - window.innerHeight ;" ) ;
689- Browser . SetScrollY ( maxScrollPosition ) ;
688+ var button1Pos = ( long ) jsExecutor . ExecuteScript ( "return Math.round( document.getElementById('do-navigation').getBoundingClientRect().top + window.scrollY) ;" ) ;
689+ Browser . SetScrollY ( button1Pos ) ;
690690 Browser . Exists ( By . Id ( "do-navigation" ) ) . Click ( ) ;
691691
692- // "hash" page: check if we landed at 0, then navigate to "scroll"
692+ // "hash" page: check if we landed at 0, then navigate to "scroll"
693693 WaitStreamingRendersFullPage ( enableStreaming ) ;
694694 AssertEnhancedNavigation ( useEnhancedNavigation , elementForStalenessCheckOnHashPage ) ;
695695 AssertWeAreOnHashPage ( ) ;
@@ -713,65 +713,84 @@ public void EnhancedNavigationScrollBehavesSameAsBrowserOnNavLinkNavigation(bool
713713
714714 [ Theory ]
715715 [ InlineData ( false , false ) ]
716- [ InlineData ( false , true ) ] // ToDo: Forwards -> line 772, Expected: 3270 Actual: 1400
717- [ InlineData ( true , true ) ] // ToDo: Forwards -> line 772, Expected: 2400 Actual: 412
718- [ InlineData ( true , false ) ] // ToDo: why it requires a special condition?
716+ [ InlineData ( false , true ) ]
717+ [ InlineData ( true , true ) ]
718+ [ InlineData ( true , false ) ]
719719 public void EnhancedNavigationScrollBehavesSameAsBrowserOnBackwardsForwardsAction ( bool enableStreaming , bool useEnhancedNavigation )
720720 {
721721 // This test checks if the scroll position is preserved after backwards/forwards action
722722 string landingPageSuffix = enableStreaming ? "" : "-no-streaming" ;
723723 Navigate ( $ "{ ServerPathBase } /nav/testing-scroll{ landingPageSuffix } ") ;
724724 EnhancedNavigationTestUtil . SuppressEnhancedNavigation ( this , shouldSuppress : ! useEnhancedNavigation , skipNavigation : true ) ;
725725
726- // "scroll" page: max scroll position on exiting it
726+ // "scroll" page: scroll to pos1, navigate away
727727 AssertWeAreOnScrollTestPage ( ) ;
728728 WaitStreamingRendersFullPage ( enableStreaming ) ;
729729
730730 // staleness check is used to assert enhanced navigation is enabled/disabled, as requested
731731 var elementForStalenessCheckOnHashPage = Browser . Exists ( By . TagName ( "html" ) ) ;
732732
733733 var jsExecutor = ( IJavaScriptExecutor ) Browser ;
734- var maxScrollPosition = ( long ) jsExecutor . ExecuteScript ( "return document.documentElement.scrollHeight - window.innerHeight ;" ) ;
735- Browser . SetScrollY ( maxScrollPosition ) ;
734+ var scrollPagePos1 = ( long ) jsExecutor . ExecuteScript ( "return Math.round( document.getElementById('do-navigation').getBoundingClientRect().top + window.scrollY) ;" ) - 100 ;
735+ Browser . SetScrollY ( scrollPagePos1 ) ;
736736 Browser . Exists ( By . Id ( "do-navigation" ) ) . Click ( ) ;
737737
738- // "hash" page: scroll position at fragment on exiting it
738+ // "hash" page: scroll to pos1, navigate away
739739 WaitStreamingRendersFullPage ( enableStreaming ) ;
740740 AssertEnhancedNavigation ( useEnhancedNavigation , elementForStalenessCheckOnHashPage ) ;
741741 AssertWeAreOnHashPage ( ) ;
742742 var elementForStalenessCheckOnScrollPage = Browser . Exists ( By . TagName ( "html" ) ) ;
743- var fragmentScrollPosition = ( long ) jsExecutor . ExecuteScript ( "return Math.round(document.getElementById('some-content').getBoundingClientRect().top + window.scrollY);" ) ;
744- Browser . SetScrollY ( fragmentScrollPosition ) ;
745- Browser . Navigate ( ) . Back ( ) ;
743+ var hashPagePos1 = ( long ) jsExecutor . ExecuteScript ( "return Math.round(document.getElementById('do-navigation').getBoundingClientRect().top + window.scrollY);" ) - 100 ;
744+ // make sure we are expecting different scroll positions on thr 1st and the 2nd page
745+ Assert . NotEqual ( scrollPagePos1 , hashPagePos1 ) ;
746+ Browser . SetScrollY ( hashPagePos1 ) ;
747+ Browser . Exists ( By . Id ( "do-navigation" ) ) . Click ( ) ;
746748
747- // "scroll" page: check if the scroll position is preserved at the bottom
749+ // "scroll" page: scroll to pos2, go backwards
748750 AssertWeAreOnScrollTestPage ( ) ;
749751 WaitStreamingRendersFullPage ( enableStreaming ) ;
750752 AssertEnhancedNavigation ( useEnhancedNavigation , elementForStalenessCheckOnScrollPage ) ;
753+ var scrollPagePos2 = 500 ;
754+ Browser . SetScrollY ( scrollPagePos2 ) ;
755+ Browser . Navigate ( ) . Back ( ) ;
751756
757+ // "hash" page: check if we landed on pos1, move the scroll to pos2, go backwards
758+ AssertWeAreOnHashPage ( ) ;
759+ WaitStreamingRendersFullPage ( enableStreaming ) ;
760+ AssertEnhancedNavigation ( useEnhancedNavigation , elementForStalenessCheckOnHashPage ) ;
752761 // from some reason, scroll position differs by 1 pixel between enhanced and browser's navigation
753762 // browser's navigation is not precisely going backwards/forwards to the previous state
754- var expectedMaxScrollPositionAfterBackwardsAction = useEnhancedNavigation ? maxScrollPosition : maxScrollPosition - 1 ;
755- Assert . Equal ( expectedMaxScrollPositionAfterBackwardsAction , Browser . GetScrollY ( ) ) ;
763+ var expectedHashPagePos1 = useEnhancedNavigation ? hashPagePos1 : hashPagePos1 - 1 ;
764+ Assert . Equal ( expectedHashPagePos1 , Browser . GetScrollY ( ) ) ;
765+ var hashPagePos2 = 600 ;
766+ Browser . SetScrollY ( hashPagePos2 ) ;
767+ Browser . Navigate ( ) . Back ( ) ;
756768
757- // "scroll" page: go forwards to "hash" page, max scroll position on exiting
769+ // "scroll" page: check if we landed on pos1, move the scroll to pos3, go forwards
770+ AssertWeAreOnScrollTestPage ( ) ;
771+ WaitStreamingRendersFullPage ( enableStreaming ) ;
772+ AssertEnhancedNavigation ( useEnhancedNavigation , elementForStalenessCheckOnScrollPage ) ;
773+ var expectedScrollPagePos1 = useEnhancedNavigation ? scrollPagePos1 : scrollPagePos1 - 1 ;
774+ Assert . Equal ( expectedScrollPagePos1 , Browser . GetScrollY ( ) ) ;
775+ var scrollPagePos3 = 700 ;
776+ Browser . SetScrollY ( scrollPagePos3 ) ;
758777 Browser . Navigate ( ) . Forward ( ) ;
778+
779+ // "hash" page: check if we landed on pos1, go forwards
759780 AssertWeAreOnHashPage ( ) ;
760781 WaitStreamingRendersFullPage ( enableStreaming ) ;
761782 AssertEnhancedNavigation ( useEnhancedNavigation , elementForStalenessCheckOnHashPage ) ;
762- // WHY is streaming with browser same as non-streaming with enhanced nav but different than non-streaming with browser?
763- var expectedFragmentScrollPosition = ( useEnhancedNavigation || enableStreaming ) ? fragmentScrollPosition : fragmentScrollPosition - 1 ;
764- Assert . Equal ( expectedFragmentScrollPosition , Browser . GetScrollY ( ) ) ;
783+ var expectedHashPagePos2 = useEnhancedNavigation ? hashPagePos2 : hashPagePos2 - 1 ;
784+ Assert . Equal ( expectedHashPagePos2 , Browser . GetScrollY ( ) ) ;
785+ Browser . Navigate ( ) . Forward ( ) ;
765786
766- // "hash" page: go back to "scroll" page
767- Browser . Navigate ( ) . Back ( ) ;
787+ // "scroll" page: check if we landed on pos2
768788 AssertWeAreOnScrollTestPage ( ) ;
769789 WaitStreamingRendersFullPage ( enableStreaming ) ;
770790 AssertEnhancedNavigation ( useEnhancedNavigation , elementForStalenessCheckOnScrollPage ) ;
771- var expectedMaxScrollPositionAfterSecondBackwardsAction = useEnhancedNavigation
772- ? expectedMaxScrollPositionAfterBackwardsAction
773- : expectedMaxScrollPositionAfterBackwardsAction - 1 ;
774- Assert . Equal ( expectedMaxScrollPositionAfterSecondBackwardsAction , Browser . GetScrollY ( ) ) ;
791+ var expectedScrollPagePos2 = useEnhancedNavigation ? scrollPagePos2 : scrollPagePos2 - 1 ;
792+ Assert . Equal ( expectedScrollPagePos2 , Browser . GetScrollY ( ) ) ;
793+
775794 }
776795
777796 private void AssertEnhancedNavigation ( bool useEnhancedNavigation , IWebElement elementForStalenessCheck )
0 commit comments