
    ]h                         d dl mZ d dl mZ d dl mZ d dl mZ d dlmZ d dlmZ d dl	m
Z
 ded	d
fdZdeded	d
fdZ G d d
      Zy)    )Dict)List)Optional)Union)WebDriverException)By)
WebElementtag_namereturn
RelativeByc                 6    | st        d      t        d| i      S )aW  Start searching for relative objects using a tag name.

    Note: This method may be removed in future versions, please use
    `locate_with` instead.
    :Args:
        - tag_name: the DOM tag of element to start searching.
    :Returns:
        - RelativeBy - use this object to create filters within a
            `find_elements` call.
    ztag_name can not be nullzcss selector)r   r   )r
   s    w/home/totalfocus.sw7ft.com/public_html/venv/lib/python3.12/site-packages/selenium/webdriver/support/relative_locator.pywith_tag_namer      s#      !;<<~x011    byusingc                 @    | J d       |J d       t        | |i      S )a)  Start searching for relative objects your search criteria with By.

    :Args:
        - by: The value from `By` passed in.
        - using: search term to find the element with.
    :Returns:
        - RelativeBy - use this object to create filters within a
            `find_elements` call.
    zPlease pass in a by argumentzPlease pass in a using argument)r   )r   r   s     r   locate_withr   +   s5     >999>???r5k""r   c                       e Zd ZdZddeeeeef   ef      dee	   fdZ
ddeeef   dd fdZddeeef   dd fd	Zddeeef   dd fd
Zddeeef   dd fdZddeeeef   dd fdZdefdZy)r   a  Gives the opportunity to find elements based on their relative location
    on the page from a root elelemt. It is recommended that you use the helper
    function to create it.

    Example:
        lowest = driver.find_element(By.ID, "below")

        elements = driver.find_elements(locate_with(By.CSS_SELECTOR, "p").above(lowest))

        ids = [el.get_attribute('id') for el in elements]
        assert "above" in ids
        assert "mid" in ids
    Nrootfiltersc                 (    || _         |xs g | _        y)a  Creates a new RelativeBy object. It is preferred if you use the
        `locate_with` method as this signature could change.

        :Args:
            root - A dict with `By` enum as the key and the search query as the value
            filters - A list of the filters that will be searched. If none are passed
                in please use the fluent API on the object to create the filters
        Nr   r   )selfr   r   s      r   __init__zRelativeBy.__init__I   s     	}"r   element_or_locatorr   c                 ^    |st        d      | j                  j                  d|gd       | S )zyAdd a filter to look for elements above.

        :Args:
            - element_or_locator: Element to look above
        z:Element or locator must be given when calling above methodabovekindargsr   r   appendr   r   s     r   r   zRelativeBy.aboveU   3     "$%abbW7I6JKLr   c                 ^    |st        d      | j                  j                  d|gd       | S )zyAdd a filter to look for elements below.

        :Args:
            - element_or_locator: Element to look below
        z:Element or locator must be given when calling below methodbelowr   r"   r$   s     r   r'   zRelativeBy.belowa   r%   r   c                 ^    |st        d      | j                  j                  d|gd       | S )zAdd a filter to look for elements to the left of.

        :Args:
            - element_or_locator: Element to look to the left of
        z?Element or locator must be given when calling to_left_of methodleftr   r"   r$   s     r   
to_left_ofzRelativeBy.to_left_ofm   s3     "$%fggV6H5IJKr   c                 ^    |st        d      | j                  j                  d|gd       | S )zAdd a filter to look for elements right of.

        :Args:
            - element_or_locator: Element to look right of
        z@Element or locator must be given when calling to_right_of methodrightr   r"   r$   s     r   to_right_ofzRelativeBy.to_right_ofy   s3     "$%ghhW7I6JKLr   element_or_locator_distancec                 ^    |st        d      | j                  j                  d|gd       | S )zAdd a filter to look for elements near.

        :Args:
            - element_or_locator_distance: Element to look near by the element or within a distance
        zEElement or locator or distance must be given when calling near methodnearr   r"   )r   r.   s     r   r0   zRelativeBy.near   s3     +$%lmmV6Q5RSTr   c                 8    d| j                   | j                  diS )z[Create a dict that will be passed to the driver to start searching
        for the element.relativer   r   )r   s    r   to_dictzRelativeBy.to_dict   s$     		<<
 	
r   )NN)N)__name__
__module____qualname____doc__r   r   r   r   strr   r   r	   r   r'   r*   r-   intr0   r3    r   r   r   r   :   s    
%Xd5S>3+>&?@ 
%RZ[_R` 
%
j$.>(? 
< 

j$.>(? 
< 

U:t3C-D 
P\ 

eJ4D.E 
Q] 

j$6K0L 
Xd 

 
r   N)typingr   r   r   r   selenium.common.exceptionsr   selenium.webdriver.common.byr   $selenium.webdriver.remote.webelementr	   r8   r   r   r   r:   r   r   <module>r?      sU   "     9 + ;2C 2L 2 #B #s #| #_
 _
r   