@@ -27,6 +27,7 @@ def test_anything(self):
27
27
import math
28
28
import os
29
29
import pytest
30
+ import re
30
31
import sys
31
32
import time
32
33
import traceback
@@ -549,7 +550,7 @@ def update_text_value(self, selector, new_value, by=By.CSS_SELECTOR,
549
550
if (retry and element .get_attribute ('value' ) != new_value and (
550
551
not new_value .endswith ('\n ' ))):
551
552
logging .debug ('update_text_value is falling back to jQuery!' )
552
- selector = self . jq_format (selector )
553
+ selector = re . escape (selector )
553
554
self .set_value (selector , new_value , by = by )
554
555
if self .demo_mode :
555
556
if self .driver .current_url != pre_action_url :
@@ -731,7 +732,7 @@ def get_property_value(self, selector, property, by=By.CSS_SELECTOR,
731
732
raise Exception (
732
733
"Exception: Could not convert {%s}(by=%s) to CSS_SELECTOR!" % (
733
734
selector , by ))
734
- selector = self . jq_format (selector )
735
+ selector = re . escape (selector )
735
736
script = ("""var $elm = document.querySelector('%s');
736
737
$val = window.getComputedStyle($elm).getPropertyValue('%s');
737
738
return $val;"""
@@ -755,7 +756,7 @@ def bring_to_front(self, selector, by=By.CSS_SELECTOR):
755
756
except Exception :
756
757
# Don't run action if can't convert to CSS_Selector for JavaScript
757
758
return
758
- selector = self . jq_format (selector )
759
+ selector = re . escape (selector )
759
760
script = ("""document.querySelector('%s').style.zIndex = "100";"""
760
761
% selector )
761
762
self .execute_script (script )
@@ -796,11 +797,11 @@ def highlight(self, selector, by=By.CSS_SELECTOR,
796
797
o_bs = original_box_shadow
797
798
798
799
if ":contains" not in selector and ":first" not in selector :
799
- selector = self . jq_format (selector )
800
+ selector = re . escape (selector )
800
801
self .__highlight_with_js (selector , loops , scroll , o_bs )
801
802
else :
802
803
selector = self ._make_css_match_first_element_only (selector )
803
- selector = self . jq_format (selector )
804
+ selector = re . escape (selector )
804
805
try :
805
806
self .__highlight_with_jquery (selector , loops , scroll , o_bs )
806
807
except Exception :
@@ -978,7 +979,8 @@ def remove_elements(self, selector, by=By.CSS_SELECTOR):
978
979
self .safe_execute_script (remove_script )
979
980
980
981
def jq_format (self , code ):
981
- return page_utils .jq_format (code )
982
+ # DEPRECATED - Use re.escape() instead, which does the action you want.
983
+ return page_utils ._jq_format (code )
982
984
983
985
def get_domain_url (self , url ):
984
986
return page_utils .get_domain_url (url )
@@ -1056,18 +1058,25 @@ def convert_to_css_selector(self, selector, by):
1056
1058
1057
1059
def set_value (self , selector , new_value , by = By .CSS_SELECTOR ,
1058
1060
timeout = settings .LARGE_TIMEOUT ):
1059
- """ This method uses jQuery to update a text field. """
1061
+ """ This method uses jQuery to update a text field.
1062
+ Similar to jquery_update_text_value(), but the element
1063
+ doesn't need to be officially visible to work. """
1060
1064
if self .timeout_multiplier and timeout == settings .LARGE_TIMEOUT :
1061
1065
timeout = self ._get_new_timeout (timeout )
1062
1066
if page_utils .is_xpath_selector (selector ):
1063
1067
by = By .XPATH
1068
+ orginal_selector = selector
1064
1069
selector = self .convert_to_css_selector (selector , by = by )
1065
1070
self ._demo_mode_highlight_if_active (selector , by )
1066
1071
self .scroll_to (selector , by = by , timeout = timeout )
1067
1072
value = json .dumps (new_value )
1068
1073
selector = self ._make_css_match_first_element_only (selector )
1069
1074
set_value_script = """jQuery('%s').val(%s)""" % (selector , value )
1070
1075
self .safe_execute_script (set_value_script )
1076
+ if new_value .endswith ('\n ' ):
1077
+ element = self .wait_for_element_present (
1078
+ orginal_selector , by = by , timeout = timeout )
1079
+ element .send_keys (Keys .RETURN )
1071
1080
self ._demo_mode_pause_if_active ()
1072
1081
1073
1082
def jquery_update_text_value (self , selector , new_value , by = By .CSS_SELECTOR ,
@@ -1087,7 +1096,7 @@ def jquery_update_text_value(self, selector, new_value, by=By.CSS_SELECTOR,
1087
1096
selector = self .convert_to_css_selector (selector , by = by )
1088
1097
selector = self ._make_css_match_first_element_only (selector )
1089
1098
update_text_script = """jQuery('%s').val('%s')""" % (
1090
- selector , self . jq_format (new_value ))
1099
+ selector , re . escape (new_value ))
1091
1100
self .safe_execute_script (update_text_script )
1092
1101
if new_value .endswith ('\n ' ):
1093
1102
element .send_keys ('\n ' )
0 commit comments