Skip to content

Commit b3d47bd

Browse files
committed
Add / improve methods that highlight elements
1 parent 06a495e commit b3d47bd

File tree

1 file changed

+64
-1
lines changed

1 file changed

+64
-1
lines changed

seleniumbase/fixtures/base_case.py

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ def test_anything(self):
6060
from selenium.webdriver.common.by import By
6161
from selenium.webdriver.common.keys import Keys
6262
from selenium.webdriver.remote.remote_connection import LOGGER
63+
from selenium.webdriver.remote.webelement import WebElement
6364
from seleniumbase import config as sb_config
6465
from seleniumbase.__version__ import __version__
6566
from 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

Comments
 (0)