
    Eg*                         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dS )    )Dict)List)Optional)Union)WebDriverException)By)
WebElementtag_namereturn
RelativeByc                 F    | 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    `/var/www/sysmax/venv/lib/python3.11/site-packages/selenium/webdriver/support/relative_locator.pywith_tag_namer      s.      = !;<<<~x0111    byusingc                 T    | 
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.
    NzPlease pass in a by argumentzPlease pass in a using argument)r   )r   r   s     r   locate_withr   +   s;     >>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dS )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                 &    || _         |pg | _        dS )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                 d    |st          d          | j                            d|gd           | S )z
        Add 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   C     " 	c$%abbbW7I6JKKLLLr   c                 d    |st          d          | j                            d|gd           | S )z
        Add 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                 d    |st          d          | j                            d|gd           | S )z
        Add 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   sC     " 	h$%fgggV6H5IJJKKKr   c                 d    |st          d          | 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   sC     " 	i$%ghhhW7I6JKKLLLr   element_or_locator_distancec                 d    |st          d          | j                            d|gd           | S )z
        Add 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   sC     + 	n$%lmmmV6Q5RSSTTTr   c                 $    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   :   sx        
% 
%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?      s  "                         9 9 9 9 9 9 + + + + + + ; ; ; ; ; ;2C 2L 2 2 2 2 #B #s #| # # # #_
 _
 _
 _
 _
 _
 _
 _
 _
 _
r   