
    Hwg	                         d dl Z d dlZd dlmZ d dlmZmZ d dlmZ d dl	m
Z
 d dlmZ  G d d ee            Z ed	       G d
 dee             Zy)    N)contextmanager)LiveServerTestCasetag)classpropertyimport_string)capfirstc                   n     e Zd Zg ZdZdZdZdZ fdZe	d        Z
e	d        Ze	d        Zd Zd Z xZS )	SeleniumTestCaseBaseNFc                 l   t         
|   | |||      }|j                  s t        d |j	                         D              s|S |j
                  r|j
                  d   }||_        |j                  s|j                  nd}||_        | j                  |_        t        j                  |j                     }|j
                  dd D ]T  }| j                  | t        |      ||f||| j                  |j                  d      }	t        ||	j                  |	       V |S  t        j                   d      |      S )z
        Dynamically create new classes and add them to the test module when
        multiple browsers specs are provided (e.g. --selenium=firefox,chrome).
        c              3   ^   K   | ]%  \  }}|j                  d       xr t        |       ' yw)testN)
startswithcallable).0namevalues      K/var/www/horilla/myenv/lib/python3.12/site-packages/django/test/selenium.py	<genexpr>z/SeleniumTestCaseBase.__new__.<locals>.<genexpr>   s.      )
<GD%DOOF#77)
s   +-r   z0.0.0.0   N)browserhostexternal_host
__module__zNo browsers specified.)super__new__r   anyitemsbrowsersselenium_hubr   r   sysmodulesr   r	   setattr__name__unittestskip)clsr   basesattrs
test_classfirst_browserr   moduler   browser_test_class	__class__s             r   r   zSeleniumTestCaseBase.__new__   s9   
 W_S$u=
S )
KP;;=)
 &
   
 '//2M!.J*4*A*A:??yD"JO'*'8'8J$ [[!6!67F%..qr2 Q%([[&w/6M#* $),):):&0&;&;		
&"  2 ; ;=OPQ 6x}}56zBB    c                     t        d|z        S )Nz)selenium.webdriver.%s.webdriver.WebDriverr   r'   r   s     r   import_webdriverz%SeleniumTestCaseBase.import_webdriverA   s    H7RSSr/   c                     t        d|z        S )Nz%selenium.webdriver.%s.options.Optionsr   r1   s     r   import_optionsz#SeleniumTestCaseBase.import_optionsE   s    DwNOOr/   c                 B    ddl m} t        ||j                               S )Nr   )DesiredCapabilities).selenium.webdriver.common.desired_capabilitiesr6   getattrupper)r'   r   r6   s      r   get_capabilityz#SeleniumTestCaseBase.get_capabilityI   s    V*GMMO<<r/   c                      | j                  | j                               }| j                  r
	 d|_        |S |S # t        $ r Y |S w xY w)NT)r4   r   headlessAttributeError)selfoptionss     r   create_optionsz#SeleniumTestCaseBase.create_optionsO   sS    3$%%dll35==#'  w " s   9 	AAc                     | j                   r<ddlm} |j                  | j                   | j	                  | j
                              S  | j                  | j
                        | j                               S )Nr   )	webdriver)command_executordesired_capabilities)r?   )r    seleniumrB   Remoter:   r   r2   r@   )r>   rB   s     r   create_webdriverz%SeleniumTestCaseBase.create_webdriverX   sh    *##!%!2!2%)%8%8%F $   3t$$T\\24;N;N;PQQr/   )r$   r   __qualname__r   r    r   r   r<   r   classmethodr2   r4   r:   r@   rG   __classcell__r.   s   @r   r   r      sn    HLMGH(CT T T P P = =
Rr/   r   rE   c                   t     e Zd ZdZdZed        Zed        Ze fd       Z	e fd       Z
ed        Z xZS )SeleniumTestCase
   Nc                 j    d| j                   xs | j                  d| j                  j                  S )Nzhttp://:)r   r   server_threadportr'   s    r   live_server_urlz SeleniumTestCase.live_server_urlh   s+    !$!2!2!>chh!>@Q@Q@V@VWWr/   c                 6    | j                   xs | j                  S N)r   r   rS   s    r   allowed_hostzSeleniumTestCase.allowed_hostl   s      ,CHH,r/   c                     | j                         | _        | j                  j                  | j                         t        |           y rV   )rG   rE   implicitly_waitimplicit_waitr   
setUpClassr'   r.   s    r   r[   zSeleniumTestCase.setUpClassp   s6    ++-$$S%6%67r/   c                 n    t        | d      r| j                  j                          t        |           y )NrE   )hasattrrE   quitr   _tearDownClassInternalr\   s    r   r`   z'SeleniumTestCase._tearDownClassInternalv   s*    
 3
#LL&(r/   c              #      K   | j                   j                  d       	 d | j                   j                  | j                         y# | j                   j                  | j                         w xY ww)z"Disable the default implicit wait.r   N)rE   rY   rZ   )r>   s    r   disable_implicit_waitz&SeleniumTestCase.disable_implicit_wait   sR      	%%a(	>MM))$*<*<=DMM))$*<*<=s   A3A	 &A3	'A00A3)r$   r   rH   rZ   r   r   rT   rW   rI   r[   r`   r   rb   rJ   rK   s   @r   rM   rM   c   sq    MMX X - -  
 ) ) > >r/   rM   )	metaclass)r!   r%   
contextlibr   django.testr   r   django.utils.functionalr   django.utils.module_loadingr   django.utils.textr	   typer   rM    r/   r   <module>rk      sT    
  % / 1 5 &UR4 23 URp Z">)5I "> ">r/   