@@ -764,34 +764,70 @@ def click_xpath(self, xpath):
764764 self .click (xpath , by = By .XPATH )
765765
766766 def jquery_click (self , selector , by = By .CSS_SELECTOR ):
767- if page_utils .is_xpath_selector (selector ):
768- by = By .XPATH
767+ selector , by = self ._recalculate_selector (selector , by )
769768 selector = self .convert_to_css_selector (selector , by = by )
770769 self .wait_for_element_present (
771770 selector , by = by , timeout = settings .SMALL_TIMEOUT )
772771 if self .is_element_visible (selector , by = by ):
773772 self ._demo_mode_highlight_if_active (selector , by )
774-
775- # Only get the first match
776- last_syllable = selector .split (' ' )[- 1 ]
777- if ':' not in last_syllable :
778- selector += ':first'
779-
773+ selector = self ._make_css_match_first_element_only (selector )
780774 click_script = """jQuery('%s')[0].click()""" % selector
781- try :
782- self .execute_script (click_script )
783- except Exception :
784- # The likely reason this fails is because: "jQuery is not defined"
785- self .activate_jquery () # It's a good thing we can define it here
786- self .execute_script (click_script )
775+ self .safe_execute_script (click_script )
787776 self ._demo_mode_pause_if_active ()
788777
778+ def hide_element (self , selector , by = By .CSS_SELECTOR ):
779+ selector , by = self ._recalculate_selector (selector , by )
780+ selector = self .convert_to_css_selector (selector , by = by )
781+ selector = self ._make_css_match_first_element_only (selector )
782+ hide_script = """jQuery('%s').hide()""" % selector
783+ self .safe_execute_script (hide_script )
784+
785+ def hide_elements (self , selector , by = By .CSS_SELECTOR ):
786+ selector , by = self ._recalculate_selector (selector , by )
787+ selector = self .convert_to_css_selector (selector , by = by )
788+ hide_script = """jQuery('%s').hide()""" % selector
789+ self .safe_execute_script (hide_script )
790+
791+ def show_element (self , selector , by = By .CSS_SELECTOR ):
792+ selector , by = self ._recalculate_selector (selector , by )
793+ selector = self .convert_to_css_selector (selector , by = by )
794+ selector = self ._make_css_match_first_element_only (selector )
795+ show_script = """jQuery('%s').show(0)""" % selector
796+ self .safe_execute_script (show_script )
797+
798+ def show_elements (self , selector , by = By .CSS_SELECTOR ):
799+ selector , by = self ._recalculate_selector (selector , by )
800+ selector = self .convert_to_css_selector (selector , by = by )
801+ show_script = """jQuery('%s').show(0)""" % selector
802+ self .safe_execute_script (show_script )
803+
804+ def remove_element (self , selector , by = By .CSS_SELECTOR ):
805+ selector , by = self ._recalculate_selector (selector , by )
806+ selector = self .convert_to_css_selector (selector , by = by )
807+ selector = self ._make_css_match_first_element_only (selector )
808+ remove_script = """jQuery('%s').remove()""" % selector
809+ self .safe_execute_script (remove_script )
810+
811+ def remove_elements (self , selector , by = By .CSS_SELECTOR ):
812+ selector , by = self ._recalculate_selector (selector , by )
813+ selector = self .convert_to_css_selector (selector , by = by )
814+ remove_script = """jQuery('%s').remove()""" % selector
815+ self .safe_execute_script (remove_script )
816+
789817 def jq_format (self , code ):
790818 return page_utils .jq_format (code )
791819
792820 def get_domain_url (self , url ):
793821 return page_utils .get_domain_url (url )
794822
823+ def safe_execute_script (self , script ):
824+ try :
825+ self .execute_script (script )
826+ except Exception :
827+ # The likely reason this fails is because: "jQuery is not defined"
828+ self .activate_jquery () # It's a good thing we can define it here
829+ self .execute_script (script )
830+
795831 def download_file (self , file_url , destination_folder = None ):
796832 """ Downloads the file from the url to the destination folder.
797833 If no destination folder is specified, the default one is used. """
@@ -901,6 +937,8 @@ def jquery_update_text(self, selector, new_value, by=By.CSS_SELECTOR,
901937 selector , new_value , by = by , timeout = timeout )
902938
903939 def hover_on_element (self , selector , by = By .CSS_SELECTOR ):
940+ if page_utils .is_xpath_selector (selector ):
941+ by = By .XPATH
904942 self .wait_for_element_visible (
905943 selector , by = by , timeout = settings .SMALL_TIMEOUT )
906944 self ._demo_mode_highlight_if_active (selector , by )
0 commit comments