Ë
    ¦#ijý(  ã                   óè   — d dl Z d dl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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 G d„ d«      Z ed«       G d„ dee¬«      «       Zd„ Zy)é    N)Úcontextmanager)Úwraps)ÚPath)Úsettings)ÚLiveServerTestCaseÚoverride_settingsÚ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      úN/var/www/html/office/venv/lib/python3.12/site-packages/django/test/selenium.pyú	<genexpr>z/SeleniumTestCaseBase.__new__.<locals>.<genexpr>"   s.   è ø€ ò )
Ù<G¸DÀ%ˆD�O‰O˜FÓ#Ò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__   s=  ø€ ô
 ‘W‘_ S¨$°°uÓ=ˆ
ð ×Ò¤Sñ )
ØKPÏ;É;Ë=ô)
ô &
ð ÐØ× Ò ð
 '×/Ñ/°Ñ2ˆMØ!.ˆJÔà*4×*AÒ*A�:—?’?ÀyˆDØ"ˆJŒOØ'*×'8Ñ'8ˆJÔ$ô —[‘[ ×!6Ñ!6Ñ7ˆFØ%×.Ñ.¨q¨rÐ2ò Q�Ø%(§[¡[ØÜ& wÔ/±Ð6Ø�Mà#*Ø $Ø),×):Ñ):Ø&0×&;Ñ&;ñ	ó	
&Ð"ô ˜Ð 2× ;Ñ ;Ð=OÕPðQð Ðð 7Œx�}‰}Ð5Ó6°zÓBÐBó    c                 ó   — t        d|z  «      S )Nz)selenium.webdriver.%s.webdriver.WebDriverr   ©r+   r   s     r   Úimport_webdriverz%SeleniumTestCaseBase.import_webdriverF   s   € äÐHÈ7ÑRÓSÐSr3   c                 ó   — t        d|z  «      S )Nz%selenium.webdriver.%s.options.Optionsr   r5   s     r   Úimport_optionsz#SeleniumTestCaseBase.import_optionsJ   s   € äÐDÀwÑNÓOÐOr3   c                 ó^   — ddl m} t        ||j                  «       «      }|dk(  rddi|d<   |S )Nr   )ÚDesiredCapabilitiesÚchromer   ÚALLzgoog:loggingPrefs)Ú.selenium.webdriver.common.desired_capabilitiesr:   ÚgetattrÚupper)r+   r   r:   Úcapss       r   Úget_capabilityz#SeleniumTestCaseBase.get_capabilityN   s5   € åVäÐ*¨G¯M©M«OÓ<ˆØ�hÒØ)2°EÐ(:ˆDÐ$Ñ%àˆr3   c                 óL  —  | j                  | j                  «      «       }| j                  dk(  r"|j                  d«       |j                  d«       | j                  rF| j                  xxdk(  rnxdk(  rn n  |j                  d«       |S dk(  r|j                  d«       |S |S )Nr;   z--guestz--disable-infobarsÚedgez--headless=newÚfirefoxz	-headless)r8   r   Úadd_argumentÚheadless)ÚselfÚoptionss     r   Úcreate_optionsz#SeleniumTestCaseBase.create_optionsX   sŽ   € Ø3�$×%Ñ% d§l¡lÓ3Ó5ˆØ�<‰<˜8Ò#à× Ñ  Ô+Ø× Ñ Ð!5Ô6Ø�=Š=Ø—,‘,Ø&•X¥Ó&Ø×(Ñ(Ð)9Ô:ð ˆó Ø×(Ñ(¨Ô5Øˆˆwˆr3   c                 óJ  — | j                  «       }| j                  rfddlm} | j	                  | j
                  «      j                  «       D ]  \  }}|j                  ||«       Œ |j                  | j                  |¬«      S  | j                  | j
                  «      |¬«      S )Nr   )Ú	webdriver)Úcommand_executorrH   )rH   )
rI   r$   ÚseleniumrK   rA   r   r"   Úset_capabilityÚRemoter6   )rG   rH   rK   Úkeyr   s        r   Úcreate_webdriverz%SeleniumTestCaseBase.create_webdriverf   s’   € Ø×%Ñ%Ó'ˆØ×ÒÝ*à"×1Ñ1°$·,±,Ó?×EÑEÓGò 3‘
��UØ×&Ñ& s¨EÕ2ð3ð ×#Ñ#°T×5FÑ5FÐPWÐ#ÓXÐXØ2ˆt×$Ñ$ T§\¡\Ó2¸7ÔCÐCr3   )r(   r   Ú__qualname__r#   r$   r   r   rF   r    Úclassmethodr6   r8   rA   rI   rQ   Ú__classcell__©r2   s   @r   r   r      sn   ø„ à€Hà€Là€Mà€Gà€Hô*CðX ñTó ðTð ñPó ðPð ñó ðòö	Dr3   r   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚChangeWindowSizec                 ó$   — || _         ||f| _        y ©N)rM   Únew_size)rG   ÚwidthÚheightrM   s       r   Ú__init__zChangeWindowSize.__init__s   s   € Ø ˆŒØ ˜ˆ�r3   c                 óŠ   — | j                   j                  «       | _         | j                   j                  | j                  Ž  | S rY   )rM   Úget_window_sizeÚold_sizeÚset_window_sizerZ   ©rG   s    r   Ú	__enter__zChangeWindowSize.__enter__w   s3   € ØŸ™×5Ñ5Ó7ˆŒØ%ˆ�‰×%Ñ% t§}¡}Ñ5Øˆr3   c                 óp   — | j                   j                  | j                  d   | j                  d   «       y )Nr[   r\   )rM   ra   r`   )rG   Úexc_typeÚ	exc_valueÚ	tracebacks       r   Ú__exit__zChangeWindowSize.__exit__|   s(   € Ø�‰×%Ñ% d§m¡m°GÑ&<¸d¿m¹mÈHÑ>UÕVr3   N)r(   r   rR   r]   rc   rh   © r3   r   rW   rW   r   s   „ ò(òó
Wr3   rW   rM   c                   ó  ‡ — e Zd ZdZdZdZeˆ fd„«       Zed„ «       Z	ed„ «       Z
eˆ fd„«       Zed„ «       Zed	„ «       Zed
„ «       Zed„ «       Zed„ «       Zdddœd„Zed„ «       Zd„ Zdd„Zed„ «       Zed„ «       Zˆ xZS )ÚSeleniumTestCaseé
   NFc                 ó   •— t        ‰| �  di |¤Ž | j                  sy t        | j                  j                  «       «      D ]‹  \  }}t        |d«      sŒt        | |«       t        |d«      D ]^  }t        |«      ||dœd„«       }|› d|› �|_
        |j                  › d|› �|_        ||_        ||_        t        | |j                  |«       Œ` Œ� y )NÚ_screenshot_cases)Ú_funcÚ_casec                óh   —  t        | |«      «       5   || g|¢­i |¤Žcd d d «       S # 1 sw Y   y xY wrY   )r>   )rG   ro   rp   ÚargsÚkwargss        r   r   z0SeleniumTestCase.__init_subclass__.<locals>.test”   s8   € à-œ  uÓ-Ó/ñ <Ù$ TÐ;¨DÒ;°FÑ;÷<÷ <ò <ús   ’(¨1Ú_ri   )r   Ú__init_subclass__ÚscreenshotsÚlistÚ__dict__r"   ÚhasattrÚdelattrr>   r   r(   rR   Ú_screenshot_nameÚ_screenshot_caser'   )r+   rs   r   ÚfuncÚscreenshot_caser   r2   s         €r   ru   z"SeleniumTestCase.__init_subclass__†   sÜ   ø€ ä‰Ñ!Ñ+ FÒ+Ø�ŠØä˜sŸ|™|×1Ñ1Ó3Ó4ò 	2‰JˆD�$Ü˜4Ð!4Ô5Øä�C˜Ôä#*¨4Ð1DÓ#Eò 2�ä�t“Ø,0¸ó <ó ð<ð $( &¨¨/Ð):Ð ;�”Ø'+×'8Ñ'8Ð&9¸¸?Ð:KÐ$L�Ô!Ø(,�Ô%Ø(7�Ô%Ü˜˜TŸ]™]¨DÕ1ñ2ñ	2r3   c                 ó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_urlŸ   s+   � à!$×!2Ñ!2Ò!>°c·h±hÑ!>À×@QÑ@Q×@VÒ@VÐWÐWr3   c                 ó6   — | j                   xs | j                  S rY   )r   r   rƒ   s    r   Úallowed_hostzSeleniumTestCase.allowed_host£   s   € à× Ñ Ò, C§H¡HÐ,r3   c                 óÌ   •— | j                  «       | _        | j                  j                  | j                  «       t        ‰| �  «        | j                  | j                  «       y rY   )rQ   rM   Úimplicitly_waitÚimplicit_waitr   Ú
setUpClassÚaddClassCleanupÚ_quit_selenium)r+   r2   s    €r   rŠ   zSeleniumTestCase.setUpClass§   sJ   ø€ à×+Ñ+Ó-ˆŒØ�‰×$Ñ$ S×%6Ñ%6Ô7Ü‰ÑÔØ×Ñ˜C×.Ñ.Õ/r3   c              #   ól   K  — t        dd| j                  «      5  d –— d d d «       y # 1 sw Y   y xY w­w)Ni   iÐ  ©rW   rM   rb   s    r   Údesktop_sizezSeleniumTestCase.desktop_size®   ó-   è ø€ ä˜d C¨¯©Ó7ñ 	Û÷	÷ 	ñ 	üó   ‚4š(Ÿ	4¨1­4c              #   ól   K  — t        dd| j                  «      5  d –— d d d «       y # 1 sw Y   y xY w­w)Ni   i   rŽ   rb   s    r   Úsmall_screen_sizez"SeleniumTestCase.small_screen_size³   r�   r‘   c              #   ól   K  — t        dd| j                  «      5  d –— d d d «       y # 1 sw Y   y xY w­w)Nih  i   rŽ   rb   s    r   Úmobile_sizezSeleniumTestCase.mobile_size¸   s-   è ø€ ä˜c 3¨¯©Ó6ñ 	Û÷	÷ 	ñ 	ür‘   c              #   óÂ   K  — | j                  «       5  t        t        j                  d   ¬«      5  d –— d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w­w)Néÿÿÿÿ)ÚLANGUAGE_CODE)r�   r   r   ÚLANGUAGES_BIDIrb   s    r   ÚrtlzSeleniumTestCase.rtl½   sV   è ø€ à×ÑÓ ñ 	Ü"´×1HÑ1HÈÑ1LÔMñ Û÷÷	ð 	÷ð ú÷	ð 	üs1   ‚A“A±A¶A¾	AÁA	ÁAÁAÁAc              #   óX  K  — | j                   j                  | j                  «       | j                   j                  d«       | j	                  «       5  	 d –— | j                   j                  d«       	 d d d «       y # | j                   j                  d«       w xY w# 1 sw Y   y xY w­w)Nz&localStorage.setItem('theme', 'dark');z!localStorage.removeItem('theme');)rM   Úgetr„   Úexecute_scriptr�   rb   s    r   ÚdarkzSeleniumTestCase.darkÃ   s�   è ø€ ð 	�‰×Ñ˜$×.Ñ.Ô/Ø�‰×$Ñ$Ð%MÔNØ×ÑÓ ñ 	RðRÛà—‘×,Ñ,Ð-PÕQ÷		Rð 	Røð —‘×,Ñ,Ð-PÕQú÷		Rð 	Rüs6   ‚AB*ÁBÁA>ÁBÁ5	B*Á>BÂBÂB'Â#B*)ÚmediaÚfeaturesc                ó¢   — | j                   dvr| j                  d«       i }|�||d<   |�||d<   | j                  j                  dd|dœ¬«       y )	N>   rC   r;   zÃEmulation.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   ÚskipTestrM   Úexecute)rG   rŸ   r    r¤   s       r   Úset_emulated_mediaz#SeleniumTestCase.set_emulated_mediaÎ   sk   € Ø�<‰<Ð1Ñ1Ø�M‰MðTôð
 ˆØÐØ#ˆF�7‰OØÐØ!)ˆF�:Ñð 	�‰×ÑØ.Ø7À6ÑJð 	õ 	
r3   c              #   óð   K  — | j                  dddœg¬«       | j                  «       5  	 d –— | j                  dddœg¬«       	 d d d «       y # | j                  dddœg¬«       w xY w# 1 sw Y   y xY w­w)Nzforced-colorsÚactive)r   r   )r    Únone)r¨   r�   rb   s    r   Úhigh_contrastzSeleniumTestCase.high_contrastâ   sŒ   è ø€ à×Ñ°?ÈXÑ*VÐ)WÐÔXØ×ÑÓ ñ 	ðÛà×'Ñ'Ø'6ÀÑHÐIð (õ ÷		ð 	øð ×'Ñ'Ø'6ÀÑHÐIð (õ ú÷		ð 	üs2   ‚'A6©A*«A¯A*Á	A6ÁA'Á'A*Á*A3Á/A6c                 ó,  — | j                   sy t        | | j                  «      }|j                  › d|› d|j                  › d�}t        j                  «       dz  |z  }|j                  j                  dd¬«       | j                  j                  |«       y )Nz--z.pngrv   T)Úexist_okÚparents)rv   r>   Ú_testMethodNamer{   r|   r   ÚcwdÚparentÚmkdirrM   Úsave_screenshot)rG   r   r   ÚfilenameÚpaths        r   Útake_screenshotz SeleniumTestCase.take_screenshotí   s„   € Ø×ÒØÜ�t˜T×1Ñ1Ó2ˆØ×+Ñ+Ð,¨B¨t¨f°B°t×7LÑ7LÐ6MÈTÐRˆÜ�x‰x‹z˜MÑ)¨HÑ4ˆØ�‰×Ñ 4°ÐÔ6Ø�‰×%Ñ% dÕ+r3   c                 ó´   — 	 | j                   j                  d«      }|D �cg c]  }|dk(  s|d   |k(  r|�|d   |k(  r|‘Œ c}S # t        $ r g }Y Œ4w xY wc c}w )zU
        Return Chrome console logs filtered by level and optionally source.
        r   r<   ÚlevelÚsource)rM   Úget_logÚAttributeError)rG   rº   r¹   ÚlogsÚlogs        r   Úget_browser_logsz!SeleniumTestCase.get_browser_logsö   st   € ð	Ø—=‘=×(Ñ(¨Ó3ˆDð
 ö
àØ˜’ # g¡,°%Ò"7Ø� 3 x¡=°FÒ#:ò ò
ð 	
øô ò 	ØŠDð	üò
s   ‚A ¡ AÁAÁAc                 óR   — t        | d«      r| j                  j                  «        y y )NrM   )ry   rM   Úquitrƒ   s    r   rŒ   zSeleniumTestCase._quit_selenium  s#   € ô
 �3˜
Ô#Ø�L‰L×ÑÕð $r3   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)rM   rˆ   r‰   rb   s    r   Údisable_implicit_waitz&SeleniumTestCase.disable_implicit_wait  sR   è ø€ ð 	�‰×%Ñ% aÔ(ð	>Ûà�M‰M×)Ñ)¨$×*<Ñ*<Õ=øˆD�M‰M×)Ñ)¨$×*<Ñ*<Õ=üs   ‚A3ŸA	 £&A3Á	'A0Á0A3)Nr<   )r(   r   rR   r‰   r   rv   rS   ru   r
   r„   r†   rŠ   r   r�   r“   r•   rš   rž   r¨   r¬   r·   r¿   rŒ   rÃ   rT   rU   s   @r   rk   rk   €   s  ø„ à€MØ€MØ€Kàó2ó ð2ð0 ñXó ðXð ñ-ó ð-ð ó0ó ð0ð ñó ðð ñó ðð ñó ðð ñó ðð
 ñRó ðRð +/¸ô 
ð( ñó ðò,ó
ð ñ ó ð ð ñ>ó ô>r3   rk   )Ú	metaclassc                 óT   ‡ — t        ‰ t        «      r‰ j                  d«      Š ˆ fd„}|S )Nú,c                 óv   •— ‰| _         t        | ddhj                  t        | dt	        «       «      «      «       | S )NÚtagsÚ
screenshot)rn   r'   Úunionr>   Úset)r}   Úmethod_namess    €r   Úwrapperz!screenshot_cases.<locals>.wrapper  s4   ø€ Ø!-ˆÔÜ��f˜|˜n×2Ñ2´7¸4ÀÌËÓ3OÓPÔQØˆr3   )Ú
isinstanceÚstrÚsplit)rÌ   rÍ   s   ` r   Úscreenshot_casesrÑ     s)   ø€ Ü�,¤Ô$Ø#×)Ñ)¨#Ó.ˆôð
 €Nr3   )r%   r)   Ú
contextlibr   Ú	functoolsr   Úpathlibr   Údjango.confr   Údjango.testr   r   r	   Údjango.utils.functionalr
   Údjango.utils.module_loadingr   Údjango.utils.textr   Útyper   rW   rk   rÑ   ri   r3   r   ú<module>rÛ      su   ðÛ 
Û Ý %Ý Ý å  ß BÑ BÝ 1Ý 5Ý &ôaD™4Ð 2Ó3ô aD÷HWñ Wñ €ZƒôS>Ð)Ð5Iô S>ó ðS>ól	r3   