@@ -764,34 +764,70 @@ def click_xpath(self, xpath):
764
764
self .click (xpath , by = By .XPATH )
765
765
766
766
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 )
769
768
selector = self .convert_to_css_selector (selector , by = by )
770
769
self .wait_for_element_present (
771
770
selector , by = by , timeout = settings .SMALL_TIMEOUT )
772
771
if self .is_element_visible (selector , by = by ):
773
772
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 )
780
774
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 )
787
776
self ._demo_mode_pause_if_active ()
788
777
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
+
789
817
def jq_format (self , code ):
790
818
return page_utils .jq_format (code )
791
819
792
820
def get_domain_url (self , url ):
793
821
return page_utils .get_domain_url (url )
794
822
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
+
795
831
def download_file (self , file_url , destination_folder = None ):
796
832
""" Downloads the file from the url to the destination folder.
797
833
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,
901
937
selector , new_value , by = by , timeout = timeout )
902
938
903
939
def hover_on_element (self , selector , by = By .CSS_SELECTOR ):
940
+ if page_utils .is_xpath_selector (selector ):
941
+ by = By .XPATH
904
942
self .wait_for_element_visible (
905
943
selector , by = by , timeout = settings .SMALL_TIMEOUT )
906
944
self ._demo_mode_highlight_if_active (selector , by )
0 commit comments