@@ -243,14 +243,19 @@ def double_click(self, selector, by=By.CSS_SELECTOR, timeout=None):
243243 actions .double_click (element ).perform ()
244244 except Exception :
245245 css_selector = self .convert_to_css_selector (selector , by = by )
246- css_selector = re .escape (css_selector )
246+ css_selector = re .escape (css_selector ) # Add "\\" to special chars
247247 css_selector = self .__escape_quotes_if_needed (css_selector )
248248 double_click_script = (
249249 """var targetElement1 = document.querySelector('%s');
250250 var clickEvent1 = document.createEvent('MouseEvents');
251251 clickEvent1.initEvent('dblclick', true, true);
252252 targetElement1.dispatchEvent(clickEvent1);""" % css_selector )
253- self .execute_script (double_click_script )
253+ if ":contains\\ (" not in css_selector :
254+ self .execute_script (double_click_script )
255+ else :
256+ double_click_script = (
257+ """jQuery('%s').dblclick();""" % css_selector )
258+ self .safe_execute_script (double_click_script )
254259 if settings .WAIT_FOR_RSC_ON_CLICKS :
255260 self .wait_for_ready_state_complete ()
256261 if self .demo_mode :
@@ -871,7 +876,7 @@ def set_attribute(self, selector, attribute, value, by=By.CSS_SELECTOR,
871876 value = re .escape (value )
872877 value = self .__escape_quotes_if_needed (value )
873878 css_selector = self .convert_to_css_selector (selector , by = by )
874- css_selector = re .escape (css_selector )
879+ css_selector = re .escape (css_selector ) # Add "\\" to special chars
875880 css_selector = self .__escape_quotes_if_needed (css_selector )
876881 script = ("""document.querySelector('%s').setAttribute('%s','%s');"""
877882 % (css_selector , attribute , value ))
@@ -888,7 +893,7 @@ def set_attributes(self, selector, attribute, value, by=By.CSS_SELECTOR):
888893 value = re .escape (value )
889894 value = self .__escape_quotes_if_needed (value )
890895 css_selector = self .convert_to_css_selector (selector , by = by )
891- css_selector = re .escape (css_selector )
896+ css_selector = re .escape (css_selector ) # Add "\\" to special chars
892897 css_selector = self .__escape_quotes_if_needed (css_selector )
893898 script = ("""var $elements = document.querySelectorAll('%s');
894899 var index = 0, length = $elements.length;
@@ -926,7 +931,7 @@ def remove_attribute(self, selector, attribute, by=By.CSS_SELECTOR,
926931 attribute = re .escape (attribute )
927932 attribute = self .__escape_quotes_if_needed (attribute )
928933 css_selector = self .convert_to_css_selector (selector , by = by )
929- css_selector = re .escape (css_selector )
934+ css_selector = re .escape (css_selector ) # Add "\\" to special chars
930935 css_selector = self .__escape_quotes_if_needed (css_selector )
931936 script = ("""document.querySelector('%s').removeAttribute('%s');"""
932937 % (css_selector , attribute ))
@@ -939,7 +944,7 @@ def remove_attributes(self, selector, attribute, by=By.CSS_SELECTOR):
939944 attribute = re .escape (attribute )
940945 attribute = self .__escape_quotes_if_needed (attribute )
941946 css_selector = self .convert_to_css_selector (selector , by = by )
942- css_selector = re .escape (css_selector )
947+ css_selector = re .escape (css_selector ) # Add "\\" to special chars
943948 css_selector = self .__escape_quotes_if_needed (css_selector )
944949 script = ("""var $elements = document.querySelectorAll('%s');
945950 var index = 0, length = $elements.length;
@@ -2322,7 +2327,7 @@ def click_xpath(self, xpath):
23222327 self .click (xpath , by = By .XPATH )
23232328
23242329 def js_click (self , selector , by = By .CSS_SELECTOR , all_matches = False ):
2325- """ Clicks an element using pure JS. Does not use jQuery .
2330+ """ Clicks an element using JavaScript .
23262331 If "all_matches" is False, only the first match is clicked. """
23272332 selector , by = self .__recalculate_selector (selector , by )
23282333 if by == By .LINK_TEXT :
@@ -2341,12 +2346,20 @@ def js_click(self, selector, by=By.CSS_SELECTOR, all_matches=False):
23412346 if not self .demo_mode and not self .slow_mode :
23422347 self .__scroll_to_element (element , selector , by )
23432348 css_selector = self .convert_to_css_selector (selector , by = by )
2344- css_selector = re .escape (css_selector )
2349+ css_selector = re .escape (css_selector ) # Add "\\" to special chars
23452350 css_selector = self .__escape_quotes_if_needed (css_selector )
23462351 if not all_matches :
2347- self .__js_click (selector , by = by ) # The real "magic" happens
2352+ if ":contains\\ (" not in css_selector :
2353+ self .__js_click (selector , by = by )
2354+ else :
2355+ click_script = """jQuery('%s')[0].click();""" % css_selector
2356+ self .safe_execute_script (click_script )
23482357 else :
2349- self .__js_click_all (selector , by = by ) # The real "magic" happens
2358+ if ":contains\\ (" not in css_selector :
2359+ self .__js_click_all (selector , by = by )
2360+ else :
2361+ click_script = """jQuery('%s').click();""" % css_selector
2362+ self .safe_execute_script (click_script )
23502363 self .wait_for_ready_state_complete ()
23512364 self .__demo_mode_pause_if_active ()
23522365
@@ -2363,7 +2376,7 @@ def jquery_click(self, selector, by=By.CSS_SELECTOR):
23632376 self .__demo_mode_highlight_if_active (selector , by )
23642377 selector = self .convert_to_css_selector (selector , by = by )
23652378 selector = self .__make_css_match_first_element_only (selector )
2366- click_script = """jQuery('%s')[0].click()""" % selector
2379+ click_script = """jQuery('%s')[0].click(); """ % selector
23672380 self .safe_execute_script (click_script )
23682381 self .__demo_mode_pause_if_active ()
23692382
@@ -2374,8 +2387,8 @@ def jquery_click_all(self, selector, by=By.CSS_SELECTOR):
23742387 selector , by = by , timeout = settings .SMALL_TIMEOUT )
23752388 if self .is_element_visible (selector , by = by ):
23762389 self .__demo_mode_highlight_if_active (selector , by )
2377- selector = self .convert_to_css_selector (selector , by = by )
2378- click_script = """jQuery('%s').click()""" % selector
2390+ css_selector = self .convert_to_css_selector (selector , by = by )
2391+ click_script = """jQuery('%s').click(); """ % css_selector
23792392 self .safe_execute_script (click_script )
23802393 self .__demo_mode_pause_if_active ()
23812394
@@ -2384,51 +2397,51 @@ def hide_element(self, selector, by=By.CSS_SELECTOR):
23842397 selector , by = self .__recalculate_selector (selector , by )
23852398 selector = self .convert_to_css_selector (selector , by = by )
23862399 selector = self .__make_css_match_first_element_only (selector )
2387- hide_script = """jQuery('%s').hide()""" % selector
2400+ hide_script = """jQuery('%s').hide(); """ % selector
23882401 self .safe_execute_script (hide_script )
23892402
23902403 def hide_elements (self , selector , by = By .CSS_SELECTOR ):
23912404 """ Hide all elements on the page that match the selector. """
23922405 selector , by = self .__recalculate_selector (selector , by )
23932406 selector = self .convert_to_css_selector (selector , by = by )
2394- hide_script = """jQuery('%s').hide()""" % selector
2407+ hide_script = """jQuery('%s').hide(); """ % selector
23952408 self .safe_execute_script (hide_script )
23962409
23972410 def show_element (self , selector , by = By .CSS_SELECTOR ):
23982411 """ Show the first element on the page that matches the selector. """
23992412 selector , by = self .__recalculate_selector (selector , by )
24002413 selector = self .convert_to_css_selector (selector , by = by )
24012414 selector = self .__make_css_match_first_element_only (selector )
2402- show_script = """jQuery('%s').show(0)""" % selector
2415+ show_script = """jQuery('%s').show(0); """ % selector
24032416 self .safe_execute_script (show_script )
24042417
24052418 def show_elements (self , selector , by = By .CSS_SELECTOR ):
24062419 """ Show all elements on the page that match the selector. """
24072420 selector , by = self .__recalculate_selector (selector , by )
24082421 selector = self .convert_to_css_selector (selector , by = by )
2409- show_script = """jQuery('%s').show(0)""" % selector
2422+ show_script = """jQuery('%s').show(0); """ % selector
24102423 self .safe_execute_script (show_script )
24112424
24122425 def remove_element (self , selector , by = By .CSS_SELECTOR ):
24132426 """ Remove the first element on the page that matches the selector. """
24142427 selector , by = self .__recalculate_selector (selector , by )
24152428 selector = self .convert_to_css_selector (selector , by = by )
24162429 selector = self .__make_css_match_first_element_only (selector )
2417- remove_script = """jQuery('%s').remove()""" % selector
2430+ remove_script = """jQuery('%s').remove(); """ % selector
24182431 self .safe_execute_script (remove_script )
24192432
24202433 def remove_elements (self , selector , by = By .CSS_SELECTOR ):
24212434 """ Remove all elements on the page that match the selector. """
24222435 selector , by = self .__recalculate_selector (selector , by )
24232436 selector = self .convert_to_css_selector (selector , by = by )
2424- remove_script = """jQuery('%s').remove()""" % selector
2437+ remove_script = """jQuery('%s').remove(); """ % selector
24252438 self .safe_execute_script (remove_script )
24262439
24272440 def ad_block (self ):
24282441 """ Block ads that appear on the current web page. """
24292442 from seleniumbase .config import ad_block_list
24302443 for css_selector in ad_block_list .AD_BLOCK_LIST :
2431- css_selector = re .escape (css_selector )
2444+ css_selector = re .escape (css_selector ) # Add "\\" to special chars
24322445 css_selector = self .__escape_quotes_if_needed (css_selector )
24332446 script = ("""var $elements = document.querySelectorAll('%s');
24342447 var index = 0, length = $elements.length;
@@ -2958,11 +2971,18 @@ def set_value(self, selector, text, by=By.CSS_SELECTOR, timeout=None):
29582971 text = str (text )
29592972 value = re .escape (text )
29602973 value = self .__escape_quotes_if_needed (value )
2961- css_selector = re .escape (css_selector )
2974+ css_selector = re .escape (css_selector ) # Add "\\" to special chars
29622975 css_selector = self .__escape_quotes_if_needed (css_selector )
2963- script = ("""document.querySelector('%s').value='%s';"""
2964- % (css_selector , value ))
2965- self .execute_script (script )
2976+ if ":contains\\ (" not in css_selector :
2977+ script = (
2978+ """document.querySelector('%s').value='%s';"""
2979+ "" % (css_selector , value ))
2980+ self .execute_script (script )
2981+ else :
2982+ script = (
2983+ """jQuery('%s')[0].value='%s';"""
2984+ "" % (css_selector , value ))
2985+ self .safe_execute_script (script )
29662986 if text .endswith ('\n ' ):
29672987 element = self .wait_for_element_present (
29682988 orginal_selector , by = by , timeout = timeout )
@@ -3040,7 +3060,7 @@ def jquery_update_text(self, selector, text, by=By.CSS_SELECTOR,
30403060 selector = self .__escape_quotes_if_needed (selector )
30413061 text = re .escape (text )
30423062 text = self .__escape_quotes_if_needed (text )
3043- update_text_script = """jQuery('%s').val('%s')""" % (
3063+ update_text_script = """jQuery('%s').val('%s'); """ % (
30443064 selector , text )
30453065 self .safe_execute_script (update_text_script )
30463066 if text .endswith ('\n ' ):
@@ -5625,7 +5645,7 @@ def __js_click(self, selector, by=By.CSS_SELECTOR):
56255645 """ Clicks an element using pure JS. Does not use jQuery. """
56265646 selector , by = self .__recalculate_selector (selector , by )
56275647 css_selector = self .convert_to_css_selector (selector , by = by )
5628- css_selector = re .escape (css_selector )
5648+ css_selector = re .escape (css_selector ) # Add "\\" to special chars
56295649 css_selector = self .__escape_quotes_if_needed (css_selector )
56305650 script = ("""var simulateClick = function (elem) {
56315651 var evt = new MouseEvent('click', {
@@ -5644,7 +5664,7 @@ def __js_click_all(self, selector, by=By.CSS_SELECTOR):
56445664 """ Clicks all matching elements using pure JS. (No jQuery) """
56455665 selector , by = self .__recalculate_selector (selector , by )
56465666 css_selector = self .convert_to_css_selector (selector , by = by )
5647- css_selector = re .escape (css_selector )
5667+ css_selector = re .escape (css_selector ) # Add "\\" to special chars
56485668 css_selector = self .__escape_quotes_if_needed (css_selector )
56495669 script = ("""var simulateClick = function (elem) {
56505670 var evt = new MouseEvent('click', {
@@ -5692,7 +5712,7 @@ def __jquery_click(self, selector, by=By.CSS_SELECTOR):
56925712 selector , by = by , timeout = settings .SMALL_TIMEOUT )
56935713 selector = self .convert_to_css_selector (selector , by = by )
56945714 selector = self .__make_css_match_first_element_only (selector )
5695- click_script = """jQuery('%s')[0].click()""" % selector
5715+ click_script = """jQuery('%s')[0].click(); """ % selector
56965716 self .safe_execute_script (click_script )
56975717
56985718 def __get_href_from_link_text (self , link_text , hard_fail = True ):
0 commit comments