@@ -755,7 +755,9 @@ def add_css_style(self, css_style):
755
755
'''s.type = "text/css";'''
756
756
'''s.appendChild(document.createTextNode("%s"));'''
757
757
'''h.appendChild(s);''' )
758
- self .execute_script (add_css_style_script % re .escape (css_style ))
758
+ css_style = re .escape (css_style )
759
+ css_style = self .__escape_quotes_if_needed (css_style )
760
+ self .execute_script (add_css_style_script % css_style )
759
761
760
762
def add_js_code_from_link (self , js_link ):
761
763
if js_link .startswith ("//" ):
@@ -768,7 +770,9 @@ def add_js_code_from_link(self, js_link):
768
770
'''s.onload = function() { null };'''
769
771
'''s.appendChild(document.createTextNode("%s"));'''
770
772
'''h.appendChild(s);''' )
771
- self .execute_script (add_js_code_script % re .escape (js_code ))
773
+ js_code = re .escape (js_code )
774
+ js_code = self .__escape_quotes_if_needed (js_code )
775
+ self .execute_script (add_js_code_script % js_code )
772
776
773
777
def add_meta_tag (self , http_equiv = None , content = None ):
774
778
if http_equiv is None :
@@ -812,6 +816,12 @@ def activate_jquery(self):
812
816
'''of the website's Content Security Policy '''
813
817
'''directive. ''' % self .driver .current_url )
814
818
819
+ def __are_quotes_escaped (self , string ):
820
+ return page_utils .are_quotes_escaped (string )
821
+
822
+ def __escape_quotes_if_needed (self , string ):
823
+ return page_utils .escape_quotes_if_needed (string )
824
+
815
825
def __activate_bootstrap (self ):
816
826
""" Allows you to use Bootstrap Tours with SeleniumBase
817
827
http://bootstraptour.com/
@@ -995,6 +1005,7 @@ def add_tour_step(self, message, selector=None, name=None,
995
1005
if not selector :
996
1006
selector = "html"
997
1007
selector = re .escape (selector )
1008
+ selector = self .__escape_quotes_if_needed (selector )
998
1009
999
1010
if not name :
1000
1011
name = "default"
@@ -1005,9 +1016,11 @@ def add_tour_step(self, message, selector=None, name=None,
1005
1016
if not title :
1006
1017
title = ""
1007
1018
title = re .escape (title )
1019
+ title = self .__escape_quotes_if_needed (title )
1008
1020
1009
1021
if message :
1010
1022
message = re .escape (message )
1023
+ message = self .__escape_quotes_if_needed (message )
1011
1024
else :
1012
1025
message = ""
1013
1026
@@ -1324,6 +1337,7 @@ def __wait_for_css_query_selector(
1324
1337
for x in range (int (timeout * 10 )):
1325
1338
try :
1326
1339
selector = re .escape (selector )
1340
+ selector = self .__escape_quotes_if_needed (selector )
1327
1341
element = self .execute_script (
1328
1342
"""return document.querySelector('%s')""" % selector )
1329
1343
if element :
@@ -1439,9 +1453,11 @@ def post_message(self, message, style="info", duration=None):
1439
1453
duration = settings .DEFAULT_MESSAGE_DURATION
1440
1454
else :
1441
1455
duration = self .message_duration
1456
+ message = re .escape (message )
1457
+ message = self .__escape_quotes_if_needed (message )
1442
1458
messenger_script = ('''Messenger().post({message: "%s", type: "%s", '''
1443
1459
'''hideAfter: %s, hideOnNavigate: true});'''
1444
- % (re . escape ( message ) , style , duration ))
1460
+ % (message , style , duration ))
1445
1461
try :
1446
1462
self .execute_script (messenger_script )
1447
1463
except Exception :
@@ -1481,6 +1497,7 @@ def get_property_value(self, selector, property, by=By.CSS_SELECTOR,
1481
1497
"Exception: Could not convert {%s}(by=%s) to CSS_SELECTOR!" % (
1482
1498
selector , by ))
1483
1499
selector = re .escape (selector )
1500
+ selector = self .__escape_quotes_if_needed (selector )
1484
1501
script = ("""var $elm = document.querySelector('%s');
1485
1502
$val = window.getComputedStyle($elm).getPropertyValue('%s');
1486
1503
return $val;"""
@@ -1505,6 +1522,7 @@ def bring_to_front(self, selector, by=By.CSS_SELECTOR):
1505
1522
# Don't run action if can't convert to CSS_Selector for JavaScript
1506
1523
return
1507
1524
selector = re .escape (selector )
1525
+ selector = self .__escape_quotes_if_needed (selector )
1508
1526
script = ("""document.querySelector('%s').style.zIndex = '9999';"""
1509
1527
% selector )
1510
1528
self .execute_script (script )
@@ -1560,10 +1578,12 @@ def highlight(self, selector, by=By.CSS_SELECTOR,
1560
1578
1561
1579
if ":contains" not in selector and ":first" not in selector :
1562
1580
selector = re .escape (selector )
1581
+ selector = self .__escape_quotes_if_needed (selector )
1563
1582
self .__highlight_with_js (selector , loops , o_bs )
1564
1583
else :
1565
1584
selector = self .__make_css_match_first_element_only (selector )
1566
1585
selector = re .escape (selector )
1586
+ selector = self .__escape_quotes_if_needed (selector )
1567
1587
try :
1568
1588
self .__highlight_with_jquery (selector , loops , o_bs )
1569
1589
except Exception :
@@ -1703,6 +1723,7 @@ def js_click(self, selector, by=By.CSS_SELECTOR):
1703
1723
self .__scroll_to_element (element )
1704
1724
css_selector = self .convert_to_css_selector (selector , by = by )
1705
1725
css_selector = re .escape (css_selector )
1726
+ css_selector = self .__escape_quotes_if_needed (css_selector )
1706
1727
self .__js_click (selector , by = by ) # The real "magic" happens here
1707
1728
self .__demo_mode_pause_if_active ()
1708
1729
@@ -1768,6 +1789,7 @@ def ad_block(self):
1768
1789
from seleniumbase .config import ad_block_list
1769
1790
for css_selector in ad_block_list .AD_BLOCK_LIST :
1770
1791
css_selector = re .escape (css_selector )
1792
+ css_selector = self .__escape_quotes_if_needed (css_selector )
1771
1793
script = ("""var $elements = document.querySelectorAll('%s');
1772
1794
var index = 0, length = $elements.length;
1773
1795
for(; index < length; index++){
@@ -1879,7 +1901,9 @@ def set_value(self, selector, new_value, by=By.CSS_SELECTOR,
1879
1901
if not self .demo_mode :
1880
1902
self .scroll_to (orginal_selector , by = by , timeout = timeout )
1881
1903
value = re .escape (new_value )
1904
+ value = self .__escape_quotes_if_needed (value )
1882
1905
css_selector = re .escape (css_selector )
1906
+ css_selector = self .__escape_quotes_if_needed (css_selector )
1883
1907
script = ("""document.querySelector('%s').value='%s';"""
1884
1908
% (css_selector , value ))
1885
1909
self .execute_script (script )
@@ -1915,8 +1939,11 @@ def jquery_update_text_value(self, selector, new_value, by=By.CSS_SELECTOR,
1915
1939
self .scroll_to (selector , by = by )
1916
1940
selector = self .convert_to_css_selector (selector , by = by )
1917
1941
selector = self .__make_css_match_first_element_only (selector )
1942
+ selector = self .__escape_quotes_if_needed (selector )
1943
+ new_value = re .escape (new_value )
1944
+ new_value = self .__escape_quotes_if_needed (new_value )
1918
1945
update_text_script = """jQuery('%s').val('%s')""" % (
1919
- selector , re . escape ( new_value ) )
1946
+ selector , new_value )
1920
1947
self .safe_execute_script (update_text_script )
1921
1948
if new_value .endswith ('\n ' ):
1922
1949
element .send_keys ('\n ' )
@@ -1967,8 +1994,8 @@ def hover_and_click(self, hover_selector, click_selector,
1967
1994
self .scroll_to (hover_selector , by = hover_by )
1968
1995
pre_action_url = self .driver .current_url
1969
1996
element = page_actions .hover_and_click (
1970
- self .driver , hover_selector , click_selector ,
1971
- hover_by , click_by , timeout )
1997
+ self .driver , hover_selector , click_selector ,
1998
+ hover_by , click_by , timeout )
1972
1999
if self .demo_mode :
1973
2000
if self .driver .current_url != pre_action_url :
1974
2001
self .__demo_mode_pause_if_active ()
@@ -2557,8 +2584,8 @@ def __add_delayed_assert_failure(self):
2557
2584
current_url = self .driver .current_url
2558
2585
message = self .__get_exception_message ()
2559
2586
self .__page_check_failures .append (
2560
- "CHECK #%s: (%s)\n %s" % (
2561
- self .__page_check_count , current_url , message ))
2587
+ "CHECK #%s: (%s)\n %s" % (
2588
+ self .__page_check_count , current_url , message ))
2562
2589
2563
2590
def delayed_assert_element (self , selector , by = By .CSS_SELECTOR ,
2564
2591
timeout = settings .MINI_TIMEOUT ):
@@ -2650,6 +2677,7 @@ def __js_click(self, selector, by=By.CSS_SELECTOR):
2650
2677
selector , by = self .__recalculate_selector (selector , by )
2651
2678
css_selector = self .convert_to_css_selector (selector , by = by )
2652
2679
css_selector = re .escape (css_selector )
2680
+ css_selector = self .__escape_quotes_if_needed (css_selector )
2653
2681
script = ("""var simulateClick = function (elem) {
2654
2682
var evt = new MouseEvent('click', {
2655
2683
bubbles: true,
@@ -2775,7 +2803,7 @@ def __demo_mode_pause_if_active(self, tiny=False):
2775
2803
if not tiny :
2776
2804
time .sleep (wait_time )
2777
2805
else :
2778
- time .sleep (wait_time / 3.4 )
2806
+ time .sleep (wait_time / 3.4 )
2779
2807
2780
2808
def __demo_mode_scroll_if_active (self , selector , by ):
2781
2809
if self .demo_mode :
@@ -2876,10 +2904,12 @@ def __highlight_with_assert_success(
2876
2904
2877
2905
if ":contains" not in selector and ":first" not in selector :
2878
2906
selector = re .escape (selector )
2907
+ selector = self .__escape_quotes_if_needed (selector )
2879
2908
self .__highlight_with_js_2 (message , selector , o_bs )
2880
2909
else :
2881
2910
selector = self .__make_css_match_first_element_only (selector )
2882
2911
selector = re .escape (selector )
2912
+ selector = self .__escape_quotes_if_needed (selector )
2883
2913
try :
2884
2914
self .__highlight_with_jquery_2 (message , selector , o_bs )
2885
2915
except Exception :
0 commit comments