@@ -755,7 +755,9 @@ def add_css_style(self, css_style):
755755 '''s.type = "text/css";'''
756756 '''s.appendChild(document.createTextNode("%s"));'''
757757 '''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 )
759761
760762 def add_js_code_from_link (self , js_link ):
761763 if js_link .startswith ("//" ):
@@ -768,7 +770,9 @@ def add_js_code_from_link(self, js_link):
768770 '''s.onload = function() { null };'''
769771 '''s.appendChild(document.createTextNode("%s"));'''
770772 '''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 )
772776
773777 def add_meta_tag (self , http_equiv = None , content = None ):
774778 if http_equiv is None :
@@ -812,6 +816,12 @@ def activate_jquery(self):
812816 '''of the website's Content Security Policy '''
813817 '''directive. ''' % self .driver .current_url )
814818
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+
815825 def __activate_bootstrap (self ):
816826 """ Allows you to use Bootstrap Tours with SeleniumBase
817827 http://bootstraptour.com/
@@ -995,6 +1005,7 @@ def add_tour_step(self, message, selector=None, name=None,
9951005 if not selector :
9961006 selector = "html"
9971007 selector = re .escape (selector )
1008+ selector = self .__escape_quotes_if_needed (selector )
9981009
9991010 if not name :
10001011 name = "default"
@@ -1005,9 +1016,11 @@ def add_tour_step(self, message, selector=None, name=None,
10051016 if not title :
10061017 title = ""
10071018 title = re .escape (title )
1019+ title = self .__escape_quotes_if_needed (title )
10081020
10091021 if message :
10101022 message = re .escape (message )
1023+ message = self .__escape_quotes_if_needed (message )
10111024 else :
10121025 message = ""
10131026
@@ -1324,6 +1337,7 @@ def __wait_for_css_query_selector(
13241337 for x in range (int (timeout * 10 )):
13251338 try :
13261339 selector = re .escape (selector )
1340+ selector = self .__escape_quotes_if_needed (selector )
13271341 element = self .execute_script (
13281342 """return document.querySelector('%s')""" % selector )
13291343 if element :
@@ -1439,9 +1453,11 @@ def post_message(self, message, style="info", duration=None):
14391453 duration = settings .DEFAULT_MESSAGE_DURATION
14401454 else :
14411455 duration = self .message_duration
1456+ message = re .escape (message )
1457+ message = self .__escape_quotes_if_needed (message )
14421458 messenger_script = ('''Messenger().post({message: "%s", type: "%s", '''
14431459 '''hideAfter: %s, hideOnNavigate: true});'''
1444- % (re . escape ( message ) , style , duration ))
1460+ % (message , style , duration ))
14451461 try :
14461462 self .execute_script (messenger_script )
14471463 except Exception :
@@ -1481,6 +1497,7 @@ def get_property_value(self, selector, property, by=By.CSS_SELECTOR,
14811497 "Exception: Could not convert {%s}(by=%s) to CSS_SELECTOR!" % (
14821498 selector , by ))
14831499 selector = re .escape (selector )
1500+ selector = self .__escape_quotes_if_needed (selector )
14841501 script = ("""var $elm = document.querySelector('%s');
14851502 $val = window.getComputedStyle($elm).getPropertyValue('%s');
14861503 return $val;"""
@@ -1505,6 +1522,7 @@ def bring_to_front(self, selector, by=By.CSS_SELECTOR):
15051522 # Don't run action if can't convert to CSS_Selector for JavaScript
15061523 return
15071524 selector = re .escape (selector )
1525+ selector = self .__escape_quotes_if_needed (selector )
15081526 script = ("""document.querySelector('%s').style.zIndex = '9999';"""
15091527 % selector )
15101528 self .execute_script (script )
@@ -1560,10 +1578,12 @@ def highlight(self, selector, by=By.CSS_SELECTOR,
15601578
15611579 if ":contains" not in selector and ":first" not in selector :
15621580 selector = re .escape (selector )
1581+ selector = self .__escape_quotes_if_needed (selector )
15631582 self .__highlight_with_js (selector , loops , o_bs )
15641583 else :
15651584 selector = self .__make_css_match_first_element_only (selector )
15661585 selector = re .escape (selector )
1586+ selector = self .__escape_quotes_if_needed (selector )
15671587 try :
15681588 self .__highlight_with_jquery (selector , loops , o_bs )
15691589 except Exception :
@@ -1703,6 +1723,7 @@ def js_click(self, selector, by=By.CSS_SELECTOR):
17031723 self .__scroll_to_element (element )
17041724 css_selector = self .convert_to_css_selector (selector , by = by )
17051725 css_selector = re .escape (css_selector )
1726+ css_selector = self .__escape_quotes_if_needed (css_selector )
17061727 self .__js_click (selector , by = by ) # The real "magic" happens here
17071728 self .__demo_mode_pause_if_active ()
17081729
@@ -1768,6 +1789,7 @@ def ad_block(self):
17681789 from seleniumbase .config import ad_block_list
17691790 for css_selector in ad_block_list .AD_BLOCK_LIST :
17701791 css_selector = re .escape (css_selector )
1792+ css_selector = self .__escape_quotes_if_needed (css_selector )
17711793 script = ("""var $elements = document.querySelectorAll('%s');
17721794 var index = 0, length = $elements.length;
17731795 for(; index < length; index++){
@@ -1879,7 +1901,9 @@ def set_value(self, selector, new_value, by=By.CSS_SELECTOR,
18791901 if not self .demo_mode :
18801902 self .scroll_to (orginal_selector , by = by , timeout = timeout )
18811903 value = re .escape (new_value )
1904+ value = self .__escape_quotes_if_needed (value )
18821905 css_selector = re .escape (css_selector )
1906+ css_selector = self .__escape_quotes_if_needed (css_selector )
18831907 script = ("""document.querySelector('%s').value='%s';"""
18841908 % (css_selector , value ))
18851909 self .execute_script (script )
@@ -1915,8 +1939,11 @@ def jquery_update_text_value(self, selector, new_value, by=By.CSS_SELECTOR,
19151939 self .scroll_to (selector , by = by )
19161940 selector = self .convert_to_css_selector (selector , by = by )
19171941 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 )
19181945 update_text_script = """jQuery('%s').val('%s')""" % (
1919- selector , re . escape ( new_value ) )
1946+ selector , new_value )
19201947 self .safe_execute_script (update_text_script )
19211948 if new_value .endswith ('\n ' ):
19221949 element .send_keys ('\n ' )
@@ -1967,8 +1994,8 @@ def hover_and_click(self, hover_selector, click_selector,
19671994 self .scroll_to (hover_selector , by = hover_by )
19681995 pre_action_url = self .driver .current_url
19691996 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 )
19721999 if self .demo_mode :
19732000 if self .driver .current_url != pre_action_url :
19742001 self .__demo_mode_pause_if_active ()
@@ -2557,8 +2584,8 @@ def __add_delayed_assert_failure(self):
25572584 current_url = self .driver .current_url
25582585 message = self .__get_exception_message ()
25592586 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 ))
25622589
25632590 def delayed_assert_element (self , selector , by = By .CSS_SELECTOR ,
25642591 timeout = settings .MINI_TIMEOUT ):
@@ -2650,6 +2677,7 @@ def __js_click(self, selector, by=By.CSS_SELECTOR):
26502677 selector , by = self .__recalculate_selector (selector , by )
26512678 css_selector = self .convert_to_css_selector (selector , by = by )
26522679 css_selector = re .escape (css_selector )
2680+ css_selector = self .__escape_quotes_if_needed (css_selector )
26532681 script = ("""var simulateClick = function (elem) {
26542682 var evt = new MouseEvent('click', {
26552683 bubbles: true,
@@ -2775,7 +2803,7 @@ def __demo_mode_pause_if_active(self, tiny=False):
27752803 if not tiny :
27762804 time .sleep (wait_time )
27772805 else :
2778- time .sleep (wait_time / 3.4 )
2806+ time .sleep (wait_time / 3.4 )
27792807
27802808 def __demo_mode_scroll_if_active (self , selector , by ):
27812809 if self .demo_mode :
@@ -2876,10 +2904,12 @@ def __highlight_with_assert_success(
28762904
28772905 if ":contains" not in selector and ":first" not in selector :
28782906 selector = re .escape (selector )
2907+ selector = self .__escape_quotes_if_needed (selector )
28792908 self .__highlight_with_js_2 (message , selector , o_bs )
28802909 else :
28812910 selector = self .__make_css_match_first_element_only (selector )
28822911 selector = re .escape (selector )
2912+ selector = self .__escape_quotes_if_needed (selector )
28832913 try :
28842914 self .__highlight_with_jquery_2 (message , selector , o_bs )
28852915 except Exception :
0 commit comments