
    h%                         S SK r S SKrS SKJr  S SKJr  S SKJr  S SKJ	r	  S SK
JrJrJr  S SKJr  S SKJr  S S	KJr   " S
 S\" \5      5      r " S S5      r\" S5       " S S\\S95       rS rg)    N)contextmanager)wraps)Path)settings)LiveServerTestCaseoverride_settingstag)classpropertyimport_string)capfirstc                   x   ^  \ rS rSr/ rSrSrSrSrU 4S jr	\
S 5       r\
S 5       r\
S 5       rS rS	 rS
rU =r$ )SeleniumTestCaseBase   NFc                   > [         T
U ]  XX#5      nUR                  (       d%  [        S UR	                  5        5       5      (       d  U$ UR
                  (       a  UR
                  S   nXTl        UR                  (       d  UR                  OSnXdl        U R                  Ul        [        R                  UR                     nUR
                  SS  HV  nU R                  U [        U5      < U< 3U4UUU R                  UR                  S.5      n	[        XyR                  U	5        MX     U$ [        R                   " S5      " U5      $ )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   l   #    U  H*  u  pUR                  S 5      =(       a    [        U5      v   M,     g7f)testN)
startswithcallable).0namevalues      F/var/www/html/env/lib/python3.13/site-packages/django/test/selenium.py	<genexpr>/SeleniumTestCaseBase.__new__.<locals>.<genexpr>!   s*      )
KXKDDOOF#77=s   24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"   SeleniumTestCaseBase.__new__   s*   
 W_S=
S )
KP;;=)
 &
 &
   
 '//2M!.*4*A*A:??yD"O'*'8'8J$ [[!6!67F%..qr2%([[&w/6M#* $),):):&0&;&;		
&"  ; ;=OP 3 }}56zBB    c                     [        SU-  5      $ )Nz)selenium.webdriver.%s.webdriver.WebDriverr   r-   r   s     r   import_webdriver%SeleniumTestCaseBase.import_webdriverD   s    H7RSSr6   c                     [        SU-  5      $ )Nz%selenium.webdriver.%s.options.Optionsr   r8   s     r   import_options#SeleniumTestCaseBase.import_optionsH   s    DwNOOr6   c                 @    SSK Jn  [        X!R                  5       5      $ )Nr   )DesiredCapabilities).selenium.webdriver.common.desired_capabilitiesr?   getattrupper)r-   r   r?   s      r   get_capability#SeleniumTestCaseBase.get_capabilityL   s    V*MMO<<r6   c                     U R                  U R                  5      " 5       nU R                  (       aI  U R                  ==S:X  a  O	=S:X  a  O  O    UR                  S5        U$ S:X  a  UR                  S5        U$ U$ )Nchromeedgez--headless=newfirefoxz	-headless)r<   r   headlessadd_argument)selfoptionss     r   create_options#SeleniumTestCaseBase.create_optionsR   sc    %%dll35==,,&X&(()9:  ((5wr6   c                 H   U R                  5       nU R                  (       ac  SSKJn  U R	                  U R
                  5      R                  5        H  u  p4UR                  X45        M     UR                  U R                  US9$ U R                  U R
                  5      " US9$ )Nr   )	webdriver)command_executorrL   )rL   )
rM   r&   seleniumrP   rC   r   r$   set_capabilityRemoter9   )rK   rL   rP   keyr   s        r   create_webdriver%SeleniumTestCaseBase.create_webdriver\   s    %%'*"11$,,?EEG
&&s2 H ##T5F5FPW#XX$$T\\27CCr6    )r*   r    __qualname____firstlineno__r%   r&   r   r   rI   r"   classmethodr9   r<   rC   rM   rV   __static_attributes____classcell__r4   s   @r   r   r      st    HLMGH(CT T T P P = =
	D 	Dr6   r   c                   &    \ rS rSrS rS rS rSrg)ChangeWindowSizeh   c                      X0l         X4U l        g N)rR   new_size)rK   widthheightrR   s       r   __init__ChangeWindowSize.__init__i   s     r6   c                     U R                   R                  5       U l        U R                   R                  " U R                  6   U $ rc   )rR   get_window_sizeold_sizeset_window_sizerd   rK   s    r   	__enter__ChangeWindowSize.__enter__m   s1    557%%t}}5r6   c                 p    U R                   R                  U R                  S   U R                  S   5        g )Nre   rf   )rR   rl   rk   )rK   exc_type	exc_value	tracebacks       r   __exit__ChangeWindowSize.__exit__r   s(    %%dmmG&<dmmH>UVr6   )rd   rk   rR   N)r*   r    rY   rZ   rg   rn   rt   r\   rX   r6   r   r`   r`   h   s    (
Wr6   r`   rR   c                   
  ^  \ rS rSrSrSrSr\U 4S j5       r\	S 5       r
\	S 5       r\U 4S j5       r\S	 5       r\S
 5       r\S 5       r\S 5       r\S 5       rSSS.S jr\S 5       rS r\S 5       r\S 5       rSrU =r$ )SeleniumTestCasev   
   NFc                   > [         TU ]  " S0 UD6  U R                  (       d  g [        U R                  R                  5       5       H  u  p#[        US5      (       d  M  [        X5        [        US5       H\  n[        U5      X4S.S j5       nU SU 3Ul
        UR                   SU 3Ul        X%l        XEl        [        XR                  U5        M^     M     g )N_screenshot_cases)_func_casec                p    [        X5      " 5          U" U /UQ70 UD6sS S S 5        $ ! , (       d  f       g = frc   )rA   )rK   r|   r}   argskwargss        r   r   0SeleniumTestCase.__init_subclass__.<locals>.test   s+     -/$T;D;F; 0//s   '
5_rX   )r!   __init_subclass__screenshotslist__dict__r$   hasattrdelattrrA   r   r*   rY   _screenshot_name_screenshot_caser)   )r-   r   r   funcscreenshot_caser   r4   s         r   r   "SeleniumTestCase.__init_subclass__|   s    !+F+s||1134JD4!455C#*41D#Et,0 < < $(&/): ;'+'8'8&9?:K$L!(,%(7%]]D1 $F 5r6   c                 x    SU R                   =(       d    U R                  < SU R                  R                  < 3$ )Nzhttp://:)r   r   server_threadportr-   s    r   live_server_url SeleniumTestCase.live_server_url   s+    !$!2!2!>chh!>@Q@Q@V@VWWr6   c                 @    U R                   =(       d    U R                  $ rc   )r   r   r   s    r   allowed_hostSeleniumTestCase.allowed_host   s      ,CHH,r6   c                    > U R                  5       U l        U R                  R                  U R                  5        [        TU ]  5         U R                  U R                  5        g rc   )rV   rR   implicitly_waitimplicit_waitr!   
setUpClassaddClassCleanup_quit_selenium)r-   r4   s    r   r   SeleniumTestCase.setUpClass   sJ    ++-$$S%6%67C../r6   c              #   v   #    [        SSU R                  5         S v   S S S 5        g ! , (       d  f       g = f7f)Ni   i  r`   rR   rm   s    r   desktop_sizeSeleniumTestCase.desktop_size   #     dC7 877   9(	9
69c              #   v   #    [        SSU R                  5         S v   S S S 5        g ! , (       d  f       g = f7f)Ni   i   r   rm   s    r   small_screen_size"SeleniumTestCase.small_screen_size   r   r   c              #   v   #    [        SSU R                  5         S v   S S S 5        g ! , (       d  f       g = f7f)Nih  i   r   rm   s    r   mobile_sizeSeleniumTestCase.mobile_size   s#     c36 766r   c              #      #    U R                  5          [        [        R                  S   S9   S v   S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f7f)N)LANGUAGE_CODE)r   r   r   LANGUAGES_BIDIrm   s    r   rtlSeleniumTestCase.rtl   sD      "1H1H1LM N ! MM ! s1   A&AAA	A&
A	A
A#A&c              #   b  #    U R                   R                  U R                  5        U R                   R                  S5        U R	                  5           S v   U R                   R                  S5         S S S 5        g ! U R                   R                  S5        f = f! , (       d  f       g = f7f)Nz&localStorage.setItem('theme', 'dark');z!localStorage.removeItem('theme');)rR   getr   execute_scriptr   rm   s    r   darkSeleniumTestCase.dark   s      	$../$$%MN R,,-PQ	 !  ,,-PQ	 ! s6   AB/BA>B5	B/>BB
B,(B/)mediafeaturesc                    U R                   S;  a  U R                  S5        0 nUb  XS'   Ub  X#S'   U R                  R                  SSUS.S9  g )	N>   rG   rF   zEmulation.setEmulatedMedia is only supported on Chromium and Chrome-based browsers. See https://chromedevtools.github.io/devtools-protocol/1-3/Emulation/#method-setEmulatedMedia for more details.r   r   executeCdpCommandzEmulation.setEmulatedMedia)cmdparams)driver_commandr   )r   skipTestrR   execute)rK   r   r   r   s       r   set_emulated_media#SeleniumTestCase.set_emulated_media   sg    <<11MMT
 #7O!): 	.76J 	 	
r6   c              #      #    U R                  SSS./S9  U R                  5           S v   U R                  SSS./S9   S S S 5        g ! U R                  SSS./S9  f = f! , (       d  f       g = f7f)Nzforced-colorsactive)r   r   )r   none)r   r   rm   s    r   high_contrastSeleniumTestCase.high_contrast   s     ?X*V)WX '''6HI ( 	 !  '''6HI ( 	 ! s2   $A2A!A	A! 	A2	AA!!
A/+A2c                 0   U R                   (       d  g [        X R                  5      nUR                   SU SUR                   S3n[
        R                  " 5       S-  U-  nUR                  R                  SSS9  U R                  R                  U5        g )Nz--z.pngr   T)exist_okparents)r   rA   _testMethodNamer   r   r   cwdparentmkdirrR   save_screenshot)rK   r   r   filenamepaths        r   take_screenshot SeleniumTestCase.take_screenshot   s    t112++,BtfBt7L7L6MTRxxzM)H446%%d+r6   c                 \    [        U S5      (       a  U R                  R                  5         g g )NrR   )r   rR   quitr   s    r   r   SeleniumTestCase._quit_selenium   s&    
 3
##LL $r6   c              #      #    U R                   R                  S5         Sv   U R                   R                  U R                  5        g! U R                   R                  U R                  5        f = f7f)z"Disable the default implicit wait.r   N)rR   r   r   rm   s    r   disable_implicit_wait&SeleniumTestCase.disable_implicit_wait   sQ      	%%a(	>MM))$*<*<=DMM))$*<*<=s   A3A	 &A3	'A00A3rX   )r*   r    rY   rZ   r   r   r   r[   r   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r\   r]   r^   s   @r   rw   rw   v   s   MMK2 20 X X - - 0 0        
 R R +/ 
(  ,     > >r6   rw   )	metaclassc                 `   ^  [        T [        5      (       a  T R                  S5      m U 4S jnU$ )N,c                 v   > TU l         [        U SS1R                  [        U S[	        5       5      5      5        U $ )Ntags
screenshot)r{   r)   unionrA   set)r   method_namess    r   wrapper!screenshot_cases.<locals>.wrapper  s4    !-f|n22743OPQr6   )
isinstancestrsplit)r   r   s   ` r   screenshot_casesr      s,    ,$$#))#.
 Nr6   )r'   r+   
contextlibr   	functoolsr   pathlibr   django.confr   django.testr   r   r	   django.utils.functionalr
   django.utils.module_loadingr   django.utils.textr   typer   r`   rw   r   rX   r6   r   <module>r      su    
  %     B B 1 5 &WD4 23 WDtW W ZD>)5I D> D>N	r6   