
    %jS                         d dl Z d dlZd dlZd dlmZmZmZmZ d dlm	Z	 d dl
m
Z
 d dlmZ d dlmZmZ d dlmZmZ  G d d	e      Z G d
 de      Zy)    N)DictListOptionalTuple)Image)retry)SCROLL_STEPS)	HTTPErrorUiObjectNotFoundError)Exists	intersectc            
            e Zd ZdZi dddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,Zd-\  ZZZ fd.Zd/ Z	 fd0Z
 fd1Zd2 Zd3 Zd4 Zd5 Z xZS )6SelectorzNThe class is to build parameters for UiSelector passed to Android device.
    text)   NtextContains)   NtextMatches)   NtextStartsWith)   N	className)   NclassNameMatches)    Ndescription)@   NdescriptionContains)   NdescriptionMatches)   NdescriptionStartsWith)i   N	checkable)i   Fchecked)i   F	clickable)i   FlongClickable)i    F
scrollable)i @  Fenabled)i   F	focusable)i   F)i   F)i   F)i   N)i   N)i    N)i  @ N)i   r   )i   r   )focusedselectedpackageNamepackageNameMatches
resourceIdresourceIdMatchesindexinstance)maskchildOrSiblingchildOrSiblingSelectorc                     t         t        |   | j                  d       t         t        |   | j                  g        t         t        |   | j
                  g        |D ]
  }||   | |<    y Nr   )superr   __setitem___Selector__mask_Selector__childOrSibling!_Selector__childOrSiblingSelector)selfkwargsk	__class__s      Z/var/www/oz-panel.ru/ozpay-pub/venv/lib/python3.12/site-packages/uiautomator2/_selector.py__init__zSelector.__init__.   sb    h)$++q9h)$*?*?Dh)$*G*GL 	 AQiDG	     c                 :   | j                         }|j                  d       dD ]%  }|j                  |      r|j                  |       ' g }|j                         D ]%  \  }}|j	                  |dz   t        |      z          ' ddj                  |      z   dz   S )z) remove useless part for easily debugger r2   )r3   r4   =z
Selector [z, ])copypopgetitemsappendreprjoin)r<   selectorkeyargsr>   vs         r@   __str__zSelector.__str__5   s    99;V? 	"C<<$S!	" nn& 	+FQKKC$q')*	+diio-33rB   c                     || j                   v rSt        t        |   ||       t        t        |   | j                  | | j                     | j                   |   d   z         y t        d|z        )Nr   z%s is not allowed.)_Selector__fieldsr7   r   r8   r9   ReferenceError)r<   r>   rP   r?   s      r@   r8   zSelector.__setitem__A   sl    (D-a3($$(KK$($5a8H8K$KM !!5!9::rB   c                     || j                   v rSt        t        |   |       t        t        |   | j
                  | | j
                     | j                   |   d    z         y y r6   )rS   r7   r   __delitem__r8   r9   )r<   r>   r?   s     r@   rV   zSelector.__delitem__J   s_    (D-a0($$(KK$($5q9I!9L8L$LN rB   c                 *    t         fd D              }t        di |}  j                     D ]   }| j                     j                  |       "   j                     D ].  }| j                     j                  |j                                0 |S )Nc              3   x   K   | ]1  }|j                   j                  j                  fvs)||   f 3 y wN)r9   r:   r;   ).0r>   r<   s     r@   	<genexpr>z!Selector.clone.<locals>.<genexpr>R   s@      qAKK..0M0M>
 5
q$q'l s   *:: )dictr   r:   rJ   r;   clone)r<   r=   rM   rP   ss   `    r@   r^   zSelector.cloneQ   s     D   %f%d++, 	6AT**+2215	6d334 	FAT223::1779E	FrB   c                     | | j                      j                  d       | | j                     j                  t        di |       | S )Nchildr\   r:   rJ   r;   r   r<   r=   s     r@   ra   zSelector.child\   sA    T""#**73T**+2283Ef3EFrB   c                     | | j                      j                  d       | | j                     j                  t        di |       | S )Nsiblingr\   rb   rc   s     r@   re   zSelector.siblinga   sA    T""#**95T**+2283Ef3EFrB   c                 X    | | j                      r|| | j                      d   d<   y || d<   y )Nr1   )r;   )r<   is     r@   update_instancezSelector.update_instancef   s4    --.BCD../3J? DrB   )__name__
__module____qualname____doc__rS   r9   r:   r;   rA   rQ   r8   rV   r^   ra   re   ri   __classcell__)r?   s   @r@   r   r      s1    	| 	,	
 	\ 	L 	| 	| 	n 	  	_ 	? 	_ 	 	o  	?!" 	&#$ %%'.&-#3H6 :l6F6 
4;N	

!rB   r   c                      e Zd ZdefdZed        Zed        Zed        Zde	e
   fdZd0d	ee   dej                  fd
Zd1dZdeeeeef   fdZd2dZd3dZd4defdZd5defdZd Zd6dZd7dZd8dZd8dZd9dZd0dZd9dZ d Z!d0dZ"d0dZ#d0dZ$d Z%d Z&e%e&cZ'Z(d  Z)d! Z*d" Z+d# Z,d$efd%Z-ed&        Z.d' Z/d( Z0d) Z1d* Z2d+ Z3d, Z4d- Z5ed.        Z6ed/        Z7y):UiObjectrM   c                 B    || _         || _        |j                  | _        y rY   )sessionrM   jsonrpc)r<   rr   rM   s      r@   rA   zUiObject.__init__o   s     rB   c                 .    | j                   j                  S rY   )rr   wait_timeoutr<   s    r@   ru   zUiObject.wait_timeoutt   s    ||(((rB   c                     t        |       S )z-check if the object exists in current window.)r   rv   s    r@   existszUiObject.existsx   s     d|rB   c                 L    | j                   j                  | j                        S )zui object info.)rs   objInforM   rv   s    r@   infozUiObject.info}   s     ||##DMM22rB   returnc                 L    | j                   j                  | j                        S )z!all matched ui objects info list.)rs   objInfoOfAllInstancesrM   rv   s    r@   	info_listzUiObject.info_list   s    ||11$--@@rB   N
display_idc                 x    | j                   j                  |      }|j                  | j                               S )N)r   )rr   
screenshotcropbounds)r<   r   ims      r@   r   zUiObject.screenshot   s.    \\$$
$;wwt{{}%%rB   c                     | j                  |       | j                  |      \  }}| j                  j                  ||       y)ag  
        Click UI element. 

        Args:
            timeout: seconds wait element show up
            offset: (xoff, yoff) default (0.5, 0.5) -> center

        The click method does the same logic as java uiautomator does.
        1. waitForExists 2. get VisibleBounds center 3. send click event

        Raises:
            UiObjectNotFoundError
        timeout)offsetN)	must_waitcenterrr   click)r<   r   r   xys        r@   r   zUiObject.click   s:     	w'{{&{)11a rB   c                     | j                   }|j                  d      xs |j                  d      }|d   |d   |d   |d   f\  }}}}||||fS )z]
        Returns:
            left_top_x, left_top_y, right_bottom_x, right_bottom_y
        visibleBoundsr   lefttoprightbottom)r{   rH   )r<   r{   r   lxlyrxrys          r@   r   zUiObject.bounds   s`    
 yy/*@dhhx.@wPXIYYBBBBrB   c                 z    | j                         \  }}}}|d}|\  }}||z
  ||z
  }	}|||z  z   }
||	|z  z   }|
|fS )z
        Args:
            offset: optional, (x_off, y_off)
                (0, 0) means left-top, (0.5, 0.5) means middle(Default)
        Return:
            center point (x, y)
              ?r   )r   )r<   r   r   r   r   r   xoffyoffwidthheightr   r   s               r@   r   zUiObject.center   s`     BB>F
dRbv$1vrB   c                     | j                          |dkD  r=t        j                  |       | j                  sy| j                          |dz  }|dkD  r=y)z
        Click until element is gone

        Args:
            maxretry (int): max click times
            interval (float): sleep time between clicks

        Return:
            Bool if element is gone
        r   Tr   F)click_existstimesleeprx   )r<   maxretryintervals      r@   
click_gonezUiObject.click_gone   sP     	lJJx ;;MH l rB   c                 H    	 | j                  |       y# t        $ r Y yw xY w)Nr   TF)r   r   r<   r   s     r@   r   zUiObject.click_exists   s*    	JJwJ'$ 		s    	!!durationc                     | j                  |       | j                         \  }}| j                  j                  |||      S )z
        Args:
            duration (float): seconds of pressed
            timeout (float): seconds wait element show up
        r   )r   r   rr   
long_click)r<   r   r   r   r   s        r@   r   zUiObject.long_click   s:     	w'{{}1||&&q!X66rB   c                 6    |j                  dd      }|j                  dd       } j                  |       t        |dz        t        |      dk\  sd|v sd|v r fd	} ||i |S  j                  j                   j                  t        d
i |      S )Nr   r   r   r      r   r   r   c                     j                   j                  | |      \  } }j                  j                  j                  | |      S rY   )rr   pos_rel2absrs   dragTorM   )r   r   r<   stepss     r@   drag2xyz!UiObject.drag_to.<locals>.drag2xy   s?    ||//0131||**4==!QFFrB   r\   )rG   r   intlenrs   r   rM   r   )r<   rO   r=   r   r   r   r   s   `     @r@   drag_tozUiObject.drag_to   s    ::j#.**Y-w'HsN#t9>SF]cVmG
 D+F++||""4==(2DV2DeLLrB   c                    |dv sJ | j                          | j                  }|j                  d      xs |j                  d      }|d   |d   |d   |d   f\  }}}}||z   dz  ||z   dz  }
}	|d	k(  r!| j                  j	                  |	|
|	||
       y|dk(  r$| j                  j	                  |	|
|	|dz
  |
       y|dk(  r!| j                  j	                  |	|
||
|
       y|dk(  r$| j                  j	                  |	|
|dz
  |
|
       yy)aZ  
        Performs the swipe action on the UiObject.
        Swipe from center

        Args:
            direction (str): one of ("left", "right", "up", "down")
            steps (int): move steps, one step is about 5ms
            percent: float between [0, 1]

        Note: percent require API >= 18
        # assert 0 <= percent <= 1
        )r   r   updownr   r   r   r   r   r   r   r   )r   r   r   N)r   r{   rH   rr   swipe)r<   	directionr   r{   r   r   r   r   r   cxcys              r@   r   zUiObject.swipe   s$    ;;;;yy/*@dhhx.@wPXIYYBBr'a"r'aBLLr2r2U;& LLr2r26?& LLr2r2U;'!LLr2rAvr? "rB   c                     | j                   j                  dfd	fd} ||       ||       ||       ||      f\  }}}	}
| j                  j                  | j                  |||	|
|      S )z
        perform two point gesture.
        Usage:
        d().gesture(startPoint1, startPoint2, endPoint1, endPoint2, steps)
        c                 &     | |      \  } }| |dS )N)r   r   r\   )r   r   rel2abss     r@   pointzUiObject.gesture.<locals>.point  s    1a=DAq##rB   c                 6    t        |       t        k(  r |  S | S rY   )typetuple)ptr   s    r@   ctpzUiObject.gesture.<locals>.ctp  s    !%bU!25":::rB   )r   r   )rr   r   rs   gesturerM   )r<   start1start2end1end2r   r   s1s2e1e2r   r   s              @@r@   r   zUiObject.gesture  si     ,,**	$	; Vc&k3t9c$iGBB||##DMM2r2r5IIrB   c                 P    | j                   j                  | j                  ||      S rY   )rs   pinchInrM   r<   percentr   s      r@   pinch_inzUiObject.pinch_in!  s    ||##DMM7EBBrB   c                 P    | j                   j                  | j                  ||      S rY   )rs   pinchOutrM   r   s      r@   	pinch_outzUiObject.pinch_out$  s    ||$$T]]GUCCrB   c                    || j                   }|dz   }|r5	 | j                  j                  | j                  t	        |dz        |      S 	 | j                  j                  | j                  t	        |dz        |      S # t
        $ r7}t        j                  d|z  t               | j                         cY d}~S d}~ww xY w# t
        $ r8}t        j                  d|z  t               | j                          cY d}~S d}~ww xY w)z
        Wait until UI Element exists or gone

        Args:
            timeout (float): wait element timeout

        Example:
            d(text="Clock").wait()
            d(text="Settings").wait(exists=False) # wait until it's gone
        N
   i  )http_timeoutzwaitForExists readTimeout: %s)ru   rs   waitForExistsrM   r   r
   warningswarnRuntimeWarningrx   waitUntilGone)r<   rx   r   	http_waites        r@   waitzUiObject.wait'  s     ?''GbL	%||11$--25gn2E?H 2 J J)||11$--25gn2E?H 2 J J  %=A,.{{}$%  )=A,.;;=(()s;   3B  3C  	C 	,B;5C ;C 	D-C?9D?Dc                 H    |xs | j                   }| j                  d|      S )z wait until ui gone
        Args:
            timeout (float): wait element gone timeout

        Returns:
            bool if element gone
        F)rx   r   )ru   r   r   s     r@   	wait_gonezUiObject.wait_goneH  s'     .T..yywy77rB   c                 l    | j                  ||      s"t        dt        | j                        dd      y)z3 wait and if not found raise UiObjectNotFoundError ir   )codedatamethodN)r   r   strrM   )r<   rx   r   s      r@   r   zUiObject.must_waitS  s1    yy)'T]]AS_e(fgg *rB   c                 $    | j                  |      S )z alias of set_text )set_text)r<   r   s     r@   	send_keyszUiObject.send_keysX  s    }}T""rB   c                     | j                  |       |s%| j                  j                  | j                        S | j                  j	                  | j                  |      S Nr   )r   rs   clearTextFieldrM   setText)r<   r   r   s      r@   r   zUiObject.set_text\  sG    w'<<..t}}==<<''t<<rB   c                 p    | j                  |       | j                  j                  | j                        S )z get text from field r   )r   rs   getTextrM   r   s     r@   get_textzUiObject.get_textc  s)    w'||##DMM22rB   c                 H    | j                  |       | j                  d       S r   )r   r   r   s     r@   
clear_textzUiObject.clear_texth  s    w'}}T""rB   c                 ~    t        | j                   | j                  j                         j                  di |      S Nr\   )rp   rr   rM   r^   ra   rc   s     r@   ra   zUiObject.childl  s1    &Admm&9&9&;&A&A&KF&KLLrB   c                 ~    t        | j                   | j                  j                         j                  di |      S r   )rp   rr   rM   r^   re   rc   s     r@   re   zUiObject.siblingo  s1    &Cdmm&9&9&;&C&C&Mf&MNNrB   c                    d|v rC|j                  d      }| j                  j                  | j                  t	        di |||      }n0| j                  j                  | j                  t	        di ||      }t        | j                  |      S Nallow_scroll_searchr\   )rG   rs   childByTextrM   r   rp   rr   r<   txtr=   r   names        r@   child_by_textzUiObject.child_by_textt  s     F*"(**-B"C<<++DMM8;Mf;M,/1DFD <<++DMM8;Mf;M,/1Dd++rB   c                    d|v rC|j                  d      }| j                  j                  | j                  t	        di |||      }n0| j                  j                  | j                  t	        di ||      }t        | j                  |      S r   )rG   rs   childByDescriptionrM   r   rp   rr   r   s        r@   child_by_descriptionzUiObject.child_by_description~  s     F*"(**-B"C<<224==3;3Ef3Es3FHD <<224==3;3Ef3EsLDd++rB   c                     t        | j                  | j                  j                  | j                  t        di ||            S r   )rp   rr   rs   childByInstancerM   r   )r<   instr=   s      r@   child_by_instancezUiObject.child_by_instance  s;    LLLL((8J68J)-/0 	0rB   c                     t               rY   )NotImplementedErrorrv   s    r@   parentzUiObject.parent  s     "##rB   r1   c                 <   t        | j                  t              rt        d      | j                  j	                         }|dk  r2d|d<   |d= | j
                  j                  |      }||z   dk\  sJ ||z  }|j                  |       t        | j                  |      S )z0
        Raises:
            IndexError
        z=Index is not supported when UiObject returned by child_by_xxxr   r1   )

isinstancerM   r   
IndexErrorr^   rs   countri   rp   rr   )r<   r1   rM   r  s       r@   __getitem__zUiObject.__getitem__  s    
 dmmS)O  ==&&(a<#$HZ $LL&&x0Ee#q(((H  *h//rB   c                 L    | j                   j                  | j                        S rY   )rs   r  rM   rv   s    r@   r  zUiObject.count  s    ||!!$--00rB   c                     | j                   S rY   )r  rv   s    r@   __len__zUiObject.__len__  s    zzrB   c                 V    | | j                   c G fddt              } |       S )Nc                   $    e Zd Zd Z fdZeZy)UiObject.__iter__.<locals>.Iterc                     d| _         y )Nrg   )r0   rv   s    r@   rA   z(UiObject.__iter__.<locals>.Iter.__init__  s	    
rB   c                 ~    | xj                   dz  c_         | j                   k  r| j                      S t               )Nr   )r0   StopIteration)r<   lengthobjs    r@   nextz$UiObject.__iter__.<locals>.Iter.next  s2    

a
::&tzz?*'/)rB   N)rj   rk   rl   rA   r  __next__)r  r  s   r@   Iterr    s     * HrB   r  )r  object)r<   r  r  r  s     @@r@   __iter__zUiObject.__iter__  s'    DJJV	6 	 vrB   c                 .    d } | j                   |fi |S )Nc                 H    t        | |      \  }}}}||k  r|d   | d   z
  S dS Nr   r   rg   r   rect1rect2r   r   r   r   s         r@   	onrightofz!UiObject.right.<locals>.onrightof  5    '0'>$D#uf586\5=5>1IrIrB   _UiObject__view_beside)r<   r=   r&  s      r@   r   zUiObject.right  s"    	J "t!!)6v66rB   c                 .    d } | j                   |fi |S )Nc                 H    t        | |      \  }}}}||k  r| d   |d   z
  S dS r!  r"  r#  s         r@   onleftofzUiObject.left.<locals>.onleftof  r'  rB   r(  )r<   r=   r,  s      r@   r   zUiObject.left  s"    	J "t!!(5f55rB   c                 .    d } | j                   |fi |S )Nc                 H    t        | |      \  }}}}||k  r| d   |d   z
  S dS Nr   r   rg   r"  r#  s         r@   abovezUiObject.up.<locals>.above  5    '0'>$D#uf59E\5<%/1IrIrB   r(  )r<   r=   r0  s      r@   r   zUiObject.up  "    	J "t!!%2622rB   c                 .    d } | j                   |fi |S )Nc                 H    t        | |      \  }}}}||k  r|d   | d   z
  S dS r/  r"  r#  s         r@   underzUiObject.down.<locals>.under  r1  rB   r(  )r<   r=   r5  s      r@   r   zUiObject.down  r2  rB   c                 P   | j                   d   }d\  }}t        | j                  t        di |      j	                         }t        |      D ]V  \  }} |||d         }	|	dk\  s|dk  s|	|k  s#t        di |}
|
j                  |       |	t        | j                  |
      }}X |S )Nr   )rg   Nr   r\   )r{   rp   rr   r   r   	enumerateri   )r<   onsideofr=   r   min_distfoundr   r0   r{   distui_selectors              r@   __view_besidezUiObject.__view_beside  s    8$"%T\\8+=f+=>HHJ	$Y/ 	LKE4FDN3DqyhldXo&00++E2"&{(K%	L rB   c                 h    | j                   | j                   G fddt              } |       S )
        Args:
            dimention (str): one of "vert", "vertically", "vertical", "horiz", "horizental", "horizentally"
            action (str): one of "forward", "backward", "toBeginning", "toEnd", "to"
        c                   (    e Zd Zd Zd Zd fd	Zy)UiObject.fling.<locals>._Flingc                      d| _         d| _        y NTforward	_verticalactionrv   s    r@   rA   z'UiObject.fling.<locals>._Fling.__init__      !%'rB   c                 l    |dv r	d| _         | S |dv r	d| _         | S |dv r	|| _        | S t        d|z        N)horiz
horizentalhorizentallyF)vert
verticallyverticalT)rD  backwardtoBeginningtoEndtozinvalid prop %srF  rG  
ValueErrorr<   rN   s     r@   __getattr__z*UiObject.fling.<locals>._Fling.__getattr__  X    AA%*DNK<<%)DNK   #&DKK !2S!899rB   c                 b   | j                   dk(  rj                  | j                        S | j                   dk(  rj                  | j                        S | j                   dk(  rj	                  | j                  |      S | j                   dk(  rj                  | j                  |      S y )NrD  rQ  rR  rS  )rG  flingForwardrF  flingBackwardflingToBeginning
flingToEnd)r<   
max_swipesr=   rs   rM   s      r@   __call__z'UiObject.fling.<locals>._Fling.__call__
  s    ;;)+"//$..II[[J."004>>JJ[[M1"33Hdnn4>@ @[[G+"--h.8: : ,rB   N)  )rj   rk   rl   rA   rX  r`  rs   rM   s   r@   _FlingrA    s    (:
:rB   rc  )rs   rM   r  )r<   rc  rs   rM   s     @@r@   flingzUiObject.fling  s,     ,,==	:V 	:> xrB   c                 h    | j                   | j                   G fddt              } |       S )r?  c                   ,    e Zd Zd Zd Zedf fd	Zy) UiObject.scroll.<locals>._Scrollc                      d| _         d| _        y rC  rE  rv   s    r@   rA   z)UiObject.scroll.<locals>._Scroll.__init__#  rH  rB   c                 l    |dv r	d| _         | S |dv r	d| _         | S |dv r	|| _        | S t        d|z        rJ  rU  rW  s     r@   rX  z,UiObject.scroll.<locals>._Scroll.__getattr__'  rY  rB   ra  c                    | j                   dv r;| j                   dk(  rj                  nj                  } || j                  |      S | j                   dk(  rj	                  | j                  ||      S | j                   dk(  rj                  | j                  ||      S | j                   dk(  r&j                  t        di || j                        S y )N)rD  rQ  rD  rR  rS  rT  r\   )rG  scrollForwardscrollBackwardrF  scrollToBeginningscrollToEndscrollTor   )r<   r   r_  r=   r   rs   rM   s        r@   r`  z)UiObject.scroll.<locals>._Scroll.__call__5  s    ;;"996:kkY6NW22T[TjTjF!(DNNEBB[[M1"44Xt~~5?H H[[G+"..x/95B B[[D("++Hh6H6H,0NN< < )rB   N)rj   rk   rl   rA   rX  r	   r`  rb  s   r@   _Scrollrg  "  s    (: &2c <rB   rp  )rM   rs   r  )r<   rp  rs   rM   s     @@r@   scrollzUiObject.scroll  s.     ==,, 	<f  	<D yrB   rY   )NN)r   )r   g      ?)r   )r   N)r   )d   )rr  2   )TN)8rj   rk   rl   r   rA   propertyru   rx   r{   r   r   r   r   r   r   r   r   r   r   r   r   boolr   floatr   r   r   r   r   r   r   r   r   r   r   r   r   ra   re   child_selectorfrom_parentr   r  r  r	  r  r  r  r  r   r   r   r   r)  rd  rq  r\   rB   r@   rp   rp   n   s   '( '
 ) )   3 3A4: A&Xc] &ekk &!& c3S01  "( 75 7M @>J$CD)B	8h
#=3
#MO #(NK,
,0$0C 0( 1 1$7633
 ( (T + +rB   rp   )loggingr   r   typingr   r   r   r   PILr   r   uiautomator2._protor	   uiautomator2.exceptionsr
   r   uiautomator2.utilsr   r   r]   r   r  rp   r\   rB   r@   <module>r     s@       . .   , D 0]!t ]!@Vv VrB   