Skip to content

Commit 60cbc99

Browse files
committed
Mostly adding new methods for page object manipulation.
1 parent 7956808 commit 60cbc99

File tree

1 file changed

+52
-14
lines changed

1 file changed

+52
-14
lines changed

seleniumbase/fixtures/base_case.py

Lines changed: 52 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)