@@ -133,7 +133,7 @@ def click(self, selector, by=By.CSS_SELECTOR, timeout=None, delay=0):
133
133
self .driver , selector , by , timeout = timeout )
134
134
self .__demo_mode_highlight_if_active (selector , by )
135
135
if not self .demo_mode :
136
- self .__scroll_to_element (element )
136
+ self .__scroll_to_element (element , selector , by )
137
137
pre_action_url = self .driver .current_url
138
138
if delay and delay > 0 :
139
139
time .sleep (delay )
@@ -208,7 +208,7 @@ def double_click(self, selector, by=By.CSS_SELECTOR, timeout=None):
208
208
self .driver , selector , by , timeout = timeout )
209
209
self .__demo_mode_highlight_if_active (selector , by )
210
210
if not self .demo_mode :
211
- self .__scroll_to_element (element )
211
+ self .__scroll_to_element (element , selector , by )
212
212
pre_action_url = self .driver .current_url
213
213
try :
214
214
actions = ActionChains (self .driver )
@@ -297,7 +297,7 @@ def update_text(self, selector, new_value, by=By.CSS_SELECTOR,
297
297
selector , by = by , timeout = timeout )
298
298
self .__demo_mode_highlight_if_active (selector , by )
299
299
if not self .demo_mode :
300
- self .__scroll_to_element (element )
300
+ self .__scroll_to_element (element , selector , by )
301
301
try :
302
302
element .clear ()
303
303
except (StaleElementReferenceException , ENI_Exception ):
@@ -368,7 +368,7 @@ def add_text(self, selector, text, by=By.CSS_SELECTOR, timeout=None):
368
368
selector , by = by , timeout = timeout )
369
369
self .__demo_mode_highlight_if_active (selector , by )
370
370
if not self .demo_mode :
371
- self .__scroll_to_element (element )
371
+ self .__scroll_to_element (element , selector , by )
372
372
pre_action_url = self .driver .current_url
373
373
try :
374
374
if not text .endswith ('\n ' ):
@@ -1797,13 +1797,13 @@ def scroll_to(self, selector, by=By.CSS_SELECTOR, timeout=None):
1797
1797
element = self .wait_for_element_visible (
1798
1798
selector , by = by , timeout = timeout )
1799
1799
try :
1800
- self .__scroll_to_element (element )
1800
+ self .__scroll_to_element (element , selector , by )
1801
1801
except (StaleElementReferenceException , ENI_Exception ):
1802
1802
self .wait_for_ready_state_complete ()
1803
1803
time .sleep (0.05 )
1804
1804
element = self .wait_for_element_visible (
1805
1805
selector , by = by , timeout = timeout )
1806
- self .__scroll_to_element (element )
1806
+ self .__scroll_to_element (element , selector , by )
1807
1807
1808
1808
def slow_scroll_to (self , selector , by = By .CSS_SELECTOR , timeout = None ):
1809
1809
''' Slow motion scroll to destination '''
@@ -1846,7 +1846,7 @@ def js_click(self, selector, by=By.CSS_SELECTOR, all_matches=False):
1846
1846
if self .is_element_visible (selector , by = by ):
1847
1847
self .__demo_mode_highlight_if_active (selector , by )
1848
1848
if not self .demo_mode :
1849
- self .__scroll_to_element (element )
1849
+ self .__scroll_to_element (element , selector , by )
1850
1850
css_selector = self .convert_to_css_selector (selector , by = by )
1851
1851
css_selector = re .escape (css_selector )
1852
1852
css_selector = self .__escape_quotes_if_needed (css_selector )
@@ -4047,8 +4047,12 @@ def __demo_mode_highlight_if_active(self, selector, by):
4047
4047
selector , by = by , timeout = settings .SMALL_TIMEOUT )
4048
4048
self .__slow_scroll_to_element (element )
4049
4049
4050
- def __scroll_to_element (self , element ):
4051
- js_utils .scroll_to_element (self .driver , element )
4050
+ def __scroll_to_element (self , element , selector = None , by = By .CSS_SELECTOR ):
4051
+ success = js_utils .scroll_to_element (self .driver , element )
4052
+ if not success and selector :
4053
+ self .wait_for_ready_state_complete ()
4054
+ element = page_actions .wait_for_element_visible (
4055
+ self .driver , selector , by , timeout = settings .SMALL_TIMEOUT )
4052
4056
self .__demo_mode_pause_if_active (tiny = True )
4053
4057
4054
4058
def __slow_scroll_to_element (self , element ):
0 commit comments