@@ -159,7 +159,9 @@ def get(self, url):
159
159
else :
160
160
return self .get_element (url ) # url is treated like a selector
161
161
162
- def click (self , selector , by = By .CSS_SELECTOR , timeout = None , delay = 0 ):
162
+ def click (
163
+ self , selector , by = By .CSS_SELECTOR , timeout = None , delay = 0 , scroll = True
164
+ ):
163
165
self .__check_scope ()
164
166
if not timeout :
165
167
timeout = settings .SMALL_TIMEOUT
@@ -190,7 +192,7 @@ def click(self, selector, by=By.CSS_SELECTOR, timeout=None, delay=0):
190
192
self .driver , selector , by , timeout = timeout
191
193
)
192
194
self .__demo_mode_highlight_if_active (original_selector , original_by )
193
- if not self .demo_mode and not self .slow_mode :
195
+ if scroll and not self .demo_mode and not self .slow_mode :
194
196
self .__scroll_to_element (element , selector , by )
195
197
pre_action_url = self .driver .current_url
196
198
try :
@@ -1184,7 +1186,13 @@ def get_attribute(
1184
1186
return None
1185
1187
1186
1188
def set_attribute (
1187
- self , selector , attribute , value , by = By .CSS_SELECTOR , timeout = None
1189
+ self ,
1190
+ selector ,
1191
+ attribute ,
1192
+ value ,
1193
+ by = By .CSS_SELECTOR ,
1194
+ timeout = None ,
1195
+ scroll = False ,
1188
1196
):
1189
1197
"""This method uses JavaScript to set/update an attribute.
1190
1198
Only the first matching selector from querySelector() is used."""
@@ -1194,7 +1202,7 @@ def set_attribute(
1194
1202
if self .timeout_multiplier and timeout == settings .SMALL_TIMEOUT :
1195
1203
timeout = self .__get_new_timeout (timeout )
1196
1204
selector , by = self .__recalculate_selector (selector , by )
1197
- if self .is_element_visible (selector , by = by ):
1205
+ if scroll and self .is_element_visible (selector , by = by ):
1198
1206
try :
1199
1207
self .scroll_to (selector , by = by , timeout = timeout )
1200
1208
except Exception :
@@ -3045,10 +3053,13 @@ def click_xpath(self, xpath):
3045
3053
# so self.click_xpath() is just a longer name for the same action.
3046
3054
self .click (xpath , by = By .XPATH )
3047
3055
3048
- def js_click (self , selector , by = By .CSS_SELECTOR , all_matches = False ):
3056
+ def js_click (
3057
+ self , selector , by = By .CSS_SELECTOR , all_matches = False , scroll = True
3058
+ ):
3049
3059
"""Clicks an element using JavaScript.
3050
3060
Can be used to click hidden / invisible elements.
3051
- If "all_matches" is False, only the first match is clicked."""
3061
+ If "all_matches" is False, only the first match is clicked.
3062
+ If "scroll" is False, won't scroll unless running in Demo Mode."""
3052
3063
self .wait_for_ready_state_complete ()
3053
3064
selector , by = self .__recalculate_selector (selector , by , xp_ok = False )
3054
3065
if by == By .LINK_TEXT :
@@ -3066,7 +3077,7 @@ def js_click(self, selector, by=By.CSS_SELECTOR, all_matches=False):
3066
3077
)
3067
3078
if self .is_element_visible (selector , by = by ):
3068
3079
self .__demo_mode_highlight_if_active (selector , by )
3069
- if not self .demo_mode and not self .slow_mode :
3080
+ if scroll and not self .demo_mode and not self .slow_mode :
3070
3081
success = js_utils .scroll_to_element (self .driver , element )
3071
3082
if not success :
3072
3083
self .wait_for_ready_state_complete ()
@@ -4133,7 +4144,9 @@ def convert_to_css_selector(self, selector, by):
4133
4144
% (selector , by )
4134
4145
)
4135
4146
4136
- def set_value (self , selector , text , by = By .CSS_SELECTOR , timeout = None ):
4147
+ def set_value (
4148
+ self , selector , text , by = By .CSS_SELECTOR , timeout = None , scroll = True
4149
+ ):
4137
4150
""" This method uses JavaScript to update a text field. """
4138
4151
self .__check_scope ()
4139
4152
if not timeout :
@@ -4146,7 +4159,7 @@ def set_value(self, selector, text, by=By.CSS_SELECTOR, timeout=None):
4146
4159
orginal_selector = selector
4147
4160
css_selector = self .convert_to_css_selector (selector , by = by )
4148
4161
self .__demo_mode_highlight_if_active (orginal_selector , by )
4149
- if not self .demo_mode and not self .slow_mode :
4162
+ if scroll and not self .demo_mode and not self .slow_mode :
4150
4163
self .scroll_to (orginal_selector , by = by , timeout = timeout )
4151
4164
if type (text ) is int or type (text ) is float :
4152
4165
text = str (text )
0 commit comments