
    MȂi(                         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   j   #    U H*  u  pUR                  S 5      =(       a    [        U5      v   M,     g7f)testN)
startswithcallable).0namevalues      ED:\sksbv-state-backend\venv\Lib\site-packages\django/test/selenium.py	<genexpr>/SeleniumTestCaseBase.__new__.<locals>.<genexpr>"   s*      )
KXKDDOOF#77=s   13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_webdriverF   s    H7RSSr6   c                     [        SU-  5      $ )Nz%selenium.webdriver.%s.options.Optionsr   r8   s     r   import_options#SeleniumTestCaseBase.import_optionsJ   s    DwNOOr6   c                 ^    SSK Jn  [        X!R                  5       5      nUS:X  a  SS0US'   U$ )Nr   )DesiredCapabilitieschromer   ALLzgoog:loggingPrefs).selenium.webdriver.common.desired_capabilitiesr?   getattrupper)r-   r   r?   capss       r   get_capability#SeleniumTestCaseBase.get_capabilityN   s3    V*MMO<h)2E(:D$%r6   c                 ^   U R                  U R                  5      " 5       nU R                  S:X  a"  UR                  S5        UR                  S5        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$ )Nr@   z--guestz--disable-infobarsedgez--headless=newfirefoxz	-headless)r<   r   add_argumentheadless)selfoptionss     r   create_options#SeleniumTestCaseBase.create_optionsX   s    %%dll35<<8#  +  !56==,,&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_executorrN   )rN   )
rO   r&   seleniumrR   rF   r   r$   set_capabilityRemoter9   )rM   rN   rR   keyr   s        r   create_webdriver%SeleniumTestCaseBase.create_webdriverf   s    %%'*"11$,,?EEG
&&s2 H ##T5F5FPW#XX$$T\\27CCr6    )r*   r    __qualname____firstlineno__r%   r&   r   r   rL   r"   classmethodr9   r<   rF   rO   rX   __static_attributes____classcell__r4   s   @r   r   r      st    HLMGH*CX T T P P  	D 	Dr6   r   c                   &    \ rS rSrS rS rS rSrg)ChangeWindowSizer   c                      X0l         X4U l        g N)rT   new_size)rM   widthheightrT   s       r   __init__ChangeWindowSize.__init__s   s     r6   c                     U R                   R                  5       U l        U R                   R                  " U R                  6   U $ re   )rT   get_window_sizeold_sizeset_window_sizerf   rM   s    r   	__enter__ChangeWindowSize.__enter__w   s1    557%%t}}5r6   c                 p    U R                   R                  U R                  S   U R                  S   5        g )Nrg   rh   )rT   rn   rm   )rM   exc_type	exc_value	tracebacks       r   __exit__ChangeWindowSize.__exit__|   s(    %%dmmG&<dmmH>UVr6   )rf   rm   rT   N)r*   r    r[   r\   ri   rp   rv   r^   rZ   r6   r   rb   rb   r   s    (
Wr6   rb   rT   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S jr\S 5       r\S 5       rSrU =r$ )SeleniumTestCase   
   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re   )rC   )rM   r~   r   argskwargss        r   r   0SeleniumTestCase.__init_subclass__.<locals>.test   s+     -/$T;D;F; 0//s   '
5_rZ   )r!   __init_subclass__screenshotslist__dict__r$   hasattrdelattrrC   r   r*   r[   _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                  $ re   )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 re   )rX   rT   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  rb   rT   ro   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   ro   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   ro   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_BIDIro   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');)rT   getr   execute_scriptr   ro   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>   rI   r@   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   skipTestrT   execute)rM   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   ro   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   rC   _testMethodNamer   r   r   cwdparentmkdirrT   save_screenshot)rM   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 R                   R                  S5      nU Vs/ sH$  nUS:X  d  US   U:X  d  M  Ub  US   U:X  d  M"  UPM&     sn$ ! [         a    / n N?f = fs  snf )zE
Return Chrome console logs filtered by level and optionally source.
r   rA   levelsource)rT   get_logAttributeError)rM   r   r   logslogs        r   get_browser_logs!SeleniumTestCase.get_browser_logs   s    	==((3D
 
#g,%"7  3x=F#: 
 	
  	D	
s!   A A 
A A AAc                 \    [        U S5      (       a  U R                  R                  5         g g )NrT   )r   rT   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)rT   r   r   ro   s    r   disable_implicit_wait&SeleniumTestCase.disable_implicit_wait  sQ      	%%a(	>MM))$*<*<=DMM))$*<*<=s   A3A	 &A3	'A00A3rZ   )NrA   )r*   r    r[   r\   r   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   ry   ry      s   MMK2 20 X X - - 0 0        
 R R +/ 
(  ,
     > >r6   ry   )	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)   unionrC   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   rb   ry   r   rZ   r6   r   <module>r      su    
  %     B B 1 5 &aD4 23 aDHW W ZS>)5I S> S>l	r6   