@@ -60,6 +60,7 @@ def test_anything(self):
6060from selenium.webdriver.common.by import By
6161from selenium.webdriver.common.keys import Keys
6262from selenium.webdriver.remote.remote_connection import LOGGER
63+ from selenium.webdriver.remote.webelement import WebElement
6364from seleniumbase import config as sb_config
6465from seleniumbase.__version__ import __version__
6566from seleniumbase.common import decorators
@@ -5645,6 +5646,40 @@ def highlight_if_visible(
56455646 if self.is_element_visible(selector, by=by):
56465647 self.__highlight(selector, by=by, loops=loops, scroll=scroll)
56475648
5649+ def __highlight_element(self, element, loops=None, scroll=True):
5650+ self.__check_scope()
5651+ if not loops:
5652+ loops = settings.HIGHLIGHTS
5653+ if scroll and self.browser != "safari":
5654+ try:
5655+ self.__slow_scroll_to_element(element)
5656+ except Exception:
5657+ pass
5658+ if self.highlights:
5659+ loops = self.highlights
5660+ if self.browser == "ie":
5661+ loops = 1 # Override previous setting because IE is slow
5662+ loops = int(loops)
5663+ if self.headless or self.headless2 or self.xvfb:
5664+ # Headless modes have less need for highlighting elements.
5665+ # However, highlight() may be used as a sleep alternative.
5666+ loops = int(math.ceil(loops * 0.5))
5667+ o_bs = "" # original_box_shadow
5668+ try:
5669+ style = element.get_attribute("style")
5670+ except Exception:
5671+ self.wait_for_ready_state_complete()
5672+ time.sleep(0.12)
5673+ style = element.get_attribute("style")
5674+ if style:
5675+ if "box-shadow: " in style:
5676+ box_start = style.find("box-shadow: ")
5677+ box_end = style.find(";", box_start) + 1
5678+ original_box_shadow = style[box_start:box_end]
5679+ o_bs = original_box_shadow
5680+ self.__highlight_element_with_js(element, loops, o_bs)
5681+ time.sleep(0.065)
5682+
56485683 def __highlight(
56495684 self, selector, by="css selector", loops=None, scroll=True
56505685 ):
@@ -5733,13 +5768,16 @@ def highlight(
57335768 ):
57345769 """This method uses fancy JavaScript to highlight an element.
57355770 @Params
5736- selector - the selector of the element to find
5771+ selector - the selector of the element to find (Accepts WebElement)
57375772 by - the type of selector to search by (Default: CSS)
57385773 loops - # of times to repeat the highlight animation
57395774 (Default: 4. Each loop lasts for about 0.2s)
57405775 scroll - the option to scroll to the element first (Default: True)
57415776 timeout - the time to wait for the element to appear """
57425777 self.__check_scope()
5778+ if isinstance(selector, WebElement):
5779+ self.__highlight_element(selector, loops=loops, scroll=scroll)
5780+ return
57435781 if not timeout:
57445782 timeout = settings.SMALL_TIMEOUT
57455783 self.wait_for_element_visible(selector, by=by, timeout=timeout)
@@ -5751,6 +5789,31 @@ def highlight(
57515789 action = ["hi_li", selector, origin, time_stamp]
57525790 self.__extra_actions.append(action)
57535791
5792+ def highlight_elements(
5793+ self,
5794+ selector,
5795+ by="css selector",
5796+ loops=None,
5797+ scroll=True,
5798+ limit=0,
5799+ ):
5800+ if not limit:
5801+ limit = 0 # 0 means no limit
5802+ limit = int(limit)
5803+ count = 0
5804+ elements = self.find_elements(selector, by=by)
5805+ for element in elements:
5806+ try:
5807+ if element.is_displayed():
5808+ self.__highlight_element(
5809+ element, loops=loops, scroll=scroll
5810+ )
5811+ count += 1
5812+ except Exception:
5813+ pass
5814+ if limit > 0 and count >= limit:
5815+ break
5816+
57545817 def press_up_arrow(self, selector="html", times=1, by="css selector"):
57555818 """Simulates pressing the UP Arrow on the keyboard.
57565819 By default, "html" will be used as the CSS Selector target.
0 commit comments