a
    7ñ»jƒì  ã                   @   sf  d Z ddlZddlZddlZ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 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 e ¡ Ze ¡ Zde
_dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z dd„ Z!dd „ Z"d!d"„ Z#d#d$„ Z$d%d&„ Z%d'd(„ Z&d)d*„ Z'd+d,„ Z(d-d.„ Z)d/d0„ Z*d1d2„ Z+d3d4„ Z,d5d6„ Z-dS )7a[  
The SeleniumBase-Behave Connector configures command-line options.
******************************************************************
Examples:
behave -D browser=edge -D dashboard -D headless
behave -D rs -D dashboard
behave -D agent="User Agent String" -D demo
****************************************************************
-D browser=BROWSER  (The web browser to use. Default: "chrome".)
-D chrome  (Shortcut for "-D browser=chrome". Default.)
-D edge  (Shortcut for "-D browser=edge".)
-D firefox  (Shortcut for "-D browser=firefox".)
-D safari  (Shortcut for "-D browser=safari".)
-D cft  (Shortcut for using `Chrome for Testing`)
-D chs  (Shortcut for using `Chrome-Headless-Shell`)
-D settings-file=FILE  (Override default SeleniumBase settings.)
-D env=ENV  (Set the test env. Access with "self.env" in tests.)
-D account=STR  (Set account. Access with "self.account" in tests.)
-D data=STRING  (Extra test data. Access with "self.data" in tests.)
-D var1=STRING  (Extra test data. Access with "self.var1" in tests.)
-D var2=STRING  (Extra test data. Access with "self.var2" in tests.)
-D var3=STRING  (Extra test data. Access with "self.var3" in tests.)
-D variables=DICT  (A test var dict. Access with "self.variables".)
-D user-data-dir=DIR  (Set the Chrome user data directory to use.)
-D protocol=PROTOCOL  (The Selenium Grid protocol: http|https.)
-D server=SERVER  (The Selenium Grid server/IP used for tests.)
-D port=PORT  (The Selenium Grid port used by the test server.)
-D cap-file=FILE  (The web browser's desired capabilities to use.)
-D cap-string=STRING  (The web browser's desired capabilities to use.)
-D proxy=SERVER:PORT  (Connect to a proxy server:port as tests are running)
-D proxy=USERNAME:PASSWORD@SERVER:PORT  (Use an authenticated proxy server)
-D proxy-bypass-list=STRING (";"-separated hosts to bypass, Eg "*.foo.com")
-D proxy-pac-url=URL  (Connect to a proxy server using a PAC_URL.pac file.)
-D proxy-pac-url=USERNAME:PASSWORD@URL  (Authenticated proxy with PAC URL.)
-D multi-proxy  (Allow multiple authenticated proxies when multi-threaded.)
-D agent=STRING  (Modify the web browser's User-Agent string.)
-D mobile  (Use the mobile device emulator while running tests.)
-D metrics=STRING  (Set mobile metrics: "CSSWidth,CSSHeight,PixelRatio".)
-D chromium-arg=ARG  (Add a Chromium arg for Chrome/Edge, comma-separated.)
-D firefox-arg=ARG  (Add a Firefox arg for Firefox, comma-separated.)
-D firefox-pref=SET  (Set a Firefox preference:value set, comma-separated.)
-D extension-zip=ZIP  (Load a Chrome Extension .zip|.crx, comma-separated.)
-D extension-dir=DIR  (Load a Chrome Extension directory, comma-separated.)
-D binary-location=PATH  (Set path of the Chromium browser binary to use.)
-D driver-version=VER  (Set the chromedriver or uc_driver version to use.)
-D sjw  (Skip JS Waits for readyState to be "complete" or Angular to load.)
-D wfa  (Wait for AngularJS to be done loading after specific web actions.)
-D pls=PLS  (Set pageLoadStrategy on Chrome: "normal", "eager", or "none".)
-D headless  (The default headless mode. Linux uses this mode by default.)
-D headless1  (Use Chrome's old headless mode. Fast, but has limitations.)
-D headless2  (Use Chrome's new headless mode, which supports extensions.)
-D headed  (Run tests in headed/GUI mode on Linux OS, where not default.)
-D xvfb  (Run tests using the Xvfb virtual display server on Linux OS.)
-D xvfb-metrics=STRING  (Set Xvfb display size on Linux: "Width,Height".)
-D locale=LOCALE_CODE  (Set the Language Locale Code for the web browser.)
-D pdb  (Activate Post Mortem Debug Mode if a test fails.)
-D interval=SECONDS  (The autoplay interval for presentations & tour steps)
-D start-page=URL  (The starting URL for the web browser when tests begin.)
-D archive-logs  (Archive existing log files instead of deleting them.)
-D archive-downloads  (Archive old downloads instead of deleting them.)
-D time-limit=SECONDS  (Safely fail any test that exceeds the time limit.)
-D slow  (Slow down the automation. Faster than using Demo Mode.)
-D demo  (Slow down and visually see test actions as they occur.)
-D demo-sleep=SECONDS  (Set the wait time after Slow & Demo Mode actions.)
-D highlights=NUM  (Number of highlight animations for Demo Mode actions.)
-D message-duration=SECONDS  (The time length for Messenger alerts.)
-D check-js  (Check for JavaScript errors after page loads.)
-D ad-block  (Block some types of display ads from loading.)
-D block-images  (Block images from loading during tests.)
-D do-not-track  (Indicate to websites that you don't want to be tracked.)
-D verify-delay=SECONDS  (The delay before MasterQA verification checks.)
-D recorder  (Enables the Recorder for turning browser actions into code.)
-D rec-behave  (Same as Recorder Mode, but also generates behave-gherkin.)
-D rec-sleep  (If the Recorder is enabled, also records self.sleep calls.)
-D rec-print  (If the Recorder is enabled, prints output after tests end.)
-D disable-cookies  (Disable Cookies on websites. Pages might break!)
-D disable-js  (Disable JavaScript on websites. Pages might break!)
-D disable-csp  (Disable the Content Security Policy of websites.)
-D disable-ws  (Disable Web Security on Chromium-based browsers.)
-D enable-ws  (Enable Web Security on Chromium-based browsers.)
-D enable-sync  (Enable "Chrome Sync".)
-D uc | -D undetected  (Use undetected-chromedriver to evade bot-detection)
-D uc-cdp-events  (Capture CDP events when running in "-D undetected" mode)
-D log-cdp  ("goog:loggingPrefs", {"performance": "ALL", "browser": "ALL"})
-D remote-debug  (Sync to Chrome Remote Debugger chrome://inspect/#devices)
-D dashboard  (Enable the SeleniumBase Dashboard. Saved at: dashboard.html)
-D dash-title=STRING  (Set the title shown for the generated dashboard.)
-D enable-3d-apis  (Enables WebGL and 3D APIs.)
-D swiftshader  (Use Chrome's SwiftShader Graphics Library.)
-D incognito  (Enable Chrome's Incognito mode.)
-D guest  (Enable Chrome's Guest mode.)
-D dark  (Enable Chrome's Dark mode.)
-D devtools  (Open Chrome's DevTools when the browser opens.)
-D rs | -D reuse-session  (Reuse browser session for all tests.)
-D rcs | -D reuse-class-session  (Reuse session for tests in class/feature)
-D crumbs  (Delete all cookies between tests reusing a session.)
-D disable-beforeunload  (Disable the "beforeunload" event on Chrome.)
-D window-position=X,Y  (Set the browser's starting window position.)
-D window-size=WIDTH,HEIGHT  (Set the browser's starting window size.)
-D maximize  (Start tests with the browser window maximized.)
-D screenshot  (Save a screenshot at the end of each test.)
-D no-screenshot  (No screenshots saved unless tests directly ask it.)
-D visual-baseline  (Set the visual baseline for Visual/Layout tests.)
-D wire  (Use selenium-wire's webdriver for replacing selenium webdriver.)
-D external-pdf  (Set Chromium "plugins.always_open_pdf_externally":True.)
-D timeout-multiplier=MULTIPLIER  (Multiplies the default timeout values.)
é    N)Úsuppress)Úconfig)Úsettings)Údetect_b_ver)Údownload_helper)Ú
log_helper)Úproxy_helper)Úsession_helper)Ú	constants)Úshared_utilsc                 C   s
   | t _dS )a%  
    # You can override the base class from Behave's environment.py file.
    # If not using SeleniumBase's BaseCase class, then use a subclass.
        from seleniumbase import BaseCase
        from seleniumbase.plugins import behave_plugin
        behave_plugin.set_base_class(BaseCase)
    N)Ú	sb_configÚ__base_class)Z
base_class© r   úCE:\soccer\ml_env\Lib\site-packages\seleniumbase/behave/behave_sb.pyÚset_base_class�   s    r   c           4   	   C   s¬  t jsddlm} |t _i t j_t  d¡}d|_d|_d|_d|_d|_	d|_
d|_d|_d |_d |_d |_d|_d|_d|_d	|_d |_d |_d |_d |_i |_d |_d
|_d
|_d |_d|_d|_d|_d|_ d|_!d |_"d |_#d |_$d |_%d t _%d |_&d |_'d
|_(t)j*j+t,j- |_.d|_/d|_0d|_1d|_2d|_3d|_4d|_5d|_6d|_7d|_8d|_9d|_:d|_;d|_<d|_=d|_>d|_?d|_@d|_Ad|_Bd|_Cd |_Dd |_Ed|_Fd|_Gd|_Hd|_Id |_Jd |_Kd|_Ld|_Md|_Nd|_Od|_Pd|_Qd|_Rd|_Sd|_Td|_Ud|_Vd|_Wd |_Xd |_Yd|_Zd |_[d|_\d |_]d|_^d|__d|_`d|_ad |_bd |_cd |_dd |_ed |_fd |_gd |_hd |_id |_jd|_kd |_ld|_md|_nd|_od|_pd |_qd |_rd |_sd |_td t _Zd t _ud t _vd t _wd t _xtyƒ }t)jzj{}t)j|j}}| j~j}| €¡ D �]n}| �d¡�r|dd … }| �d¡�r6|dd … }| ‚¡ }|dk�rœ||  ‚¡ }	|	|v �rp|	|_| ƒ|	¡ n(|	dk�rˆt„d| ƒ‚nt„d|	|f ƒ‚�q ||v �r¾|}	|	|_| ƒ|	¡ �q |dk�rÒd|_�q |dk�rìd|_d|_�q |dk�r d|_	�q |dv �rd|_�q |dk�r(d|_�q |dv �rT|| }
|
dk�rJ|j}
|
|_�q |dv �r€|| }|dk�rv|j}||_�q |dv �r˜|| |_�q |dv �r¬d|_�q |dk�rø||  ‚¡ }|dv �rÔ||_n |dk�rèt„dƒ‚nt„d| ƒ‚�q |d v �r$|| }|dk�r|j}||_�q |d!k�rTt…|| ƒ}|dk�rJ|j}||_�q |d"k�rl|| |_�q |d#k�r„|| |_�q |d$k�rœ|| |_�q |d%k�r´|| |_�q |d&k�rX|| }|�rPt†|t‡ƒ�rPtˆ|ƒdk�rPd}| �d'¡�r| ‰d(¡�sd}n8ztŠ ‹|¡}t†|tŒƒ�s$d}W n t„�y>   d}Y n0 |�rTt„d)ƒ‚ni }�q |d*k�rp|| |_�q |d+k�rÊ||  ‚¡ }||v �rž||_||_n(|dk�r¶t„d,| ƒ‚nt„d-||f ƒ‚�q |d.v �rö|| }|dk�rì|j}||_�q |d/v �r
d|_�q |d0v �rd|_�q |d1v �r2d|_�q |d2v �rFd|_ �q |d3v �rZd|_!�q |d4v �r†|| }|dk�r||j"}||_"�q |d5v �r²|| }|dk�r¨|j#}||_#�q |d6v �rÞ|| }|dk�rÔ|j$}||_$�q |d7v �r|| }|dk�r |j%}||_%|t _%�q |d8v �r6t j%�s6d9}||_%|t _%�q |d:v �r\t j%�s\d;}||_%|t _%�q |d<v �r‚t j%�s‚d=}||_%|t _%�q |d>v �r®|| }|dk�r¤|j&}||_&�q |d?v �rú||  ‚¡ }|d@v �rÖ||_'n |dk�rêt„dAƒ‚nt„dB| ƒ‚�q |dCv �	rN||  ‚¡ }||v �	r"||_(n(|dk�	r:t„dD| ƒ‚nt„dE||f ƒ‚�q |dFv �	rbd|_/�q |dGv �	rvd|_0�q |dHv �	rŠd|_1�q |dIv �	ržd|_2�q |dJv �	r²d|_3�q |dKv �	rÆd|_4�q |dLv �	rÚd|_5�q |dMv �	rîd|_6�q |dNv �
rd|_7�q |dOv �
rd|_8d|_7�q |dPv �
r6d|_9d|_7�q |dQv �
rJd|_:�q |dRv �
r^d|_;�q |dSv �
rrd|_<�q |dTv �
r†d|_>�q |dUv �
r d|_>d|_?�q |dVk�
r´d|_@�q |dWv �
rÈd|_A�q |dXv �
rÜdt�_Ž�q |dYv �
rðdt�_��q |dZv �rd|_B�q |d[k�rd|_C�q |d\v �rD|| }|dk�r:|jD}||_D�q |d]v �rp|| }|dk�rf|jE}||_E�q |d^v �r„d|_F�q |d_v �r˜d|_H�q |d`v �r¬d|_I�q |dav �rØ|| }|dk�rÎ|jJ}||_J�q |dbv �rìd|_L�q |dcv �r d|_M�q |ddv �rd|_N�q |dev �r.d|_Od|_P�q |dfv �rNd|_Rd|_Od|_P�q |dgv �rnd|_Qd|_Od|_P�q |dhv �rŽd|_Sd|_Od|_P�q |div �r¢d|_V�q |djv �r¶d|_W�q |dkv �râ|| }|dk�rØ|jX}||_X�q |dlv �r|| }|dk�r|jY}||_Y�q |dmk�r"d|_Z�q |dnv �r:|| |_[�q |dov �rf|| }|dk�r\|j]}||_]�q |dpv �rzd|_^�q |dqv �rŽd|__�q |drv �r¢d|_`�q |dsv �r¶d|_a�q |dtv �râ|| } | dk�rØ|jb} | |_b�q |duv �r|| }!|!dk�r|jc}!|!|_c�q |dvv �r:|| }"|"dk�r0|jd}"|"|_d�q |dwv �rf|| }#|#dk�r\|je}#|#|_e�q |dxv �r’|| }$|$dk�rˆ|jf}$|$|_f�q |dyv �r¾|| }%|%dk�r´|jg}%|%|_g�q |dzv �rê|| }&|&dk�rà|jh}&|&|_h�q |d{v �r|| }'|'dk�r|ji}'|'|_i�q |d|v �rB|| }(|(dk�r8|jj}(|(|_j�q |d}v �rVd|_k�q |d~v �r‚|| })|)dk�rx|jl})|)|_l�q |dv �r–d|_m�q |d€k�rªd|_n�q |d�v �r¾d|_o�q |d‚k�rê|| }*|*dk�rà|jq}*|*|_q�q |dƒk�r|| }+|+dk�r|jr}+|+|_r�q |d„v �rB|| },|,dk�r8|js},|,|_s�q |d…k�r || }-|-dk�rd|jt}-|-|_t�q �q tˆ|ƒdk�r”t„d†tˆ|ƒ|f ƒ‚|jd‡v �rÚt� ‘|j¡}.|.�rÚt,j’ “|.¡�rÚ|jt _”|.t _•|.t _%|.|_%|jP�rü|j�rüd|_d|_d|_	|j	�r|jdˆk�rd|_	d|_n|jd‰v�r0d|_	|j%�rf|j% ‚¡ d=k�rf|jdk�rfd|_d|_d|_	|jP�rˆ|jd‰v�rˆt„dŠ|j ƒ‚|j�rœt–�sœd|_t–�rà|j�sà|j�sà|j	�sà|j�sà|j7�sÚt—d‹ƒ d|_nd|_|jO�r|j�rd|_d|_d|_	|j�s|j	�sd|_|jdŒk�r8|j�r8d|_d|_|jH�rN|jI�rNd|_H|jdk�rpt‡|jƒd�k�rpdŽ|_|j4d u �rˆ|j3d u �s°|j3d u�rœ|j3�r°|j4d u�r¾|j4�r¾d|_4d|_3nd|_4d|_3|jD�rf|jD}| ˜d�¡dk�rød�| }/t„|/ƒ‚| ™d‘d’¡}d }0d }1z(t…| šd�¡d ƒ}0t…| šd�¡d ƒ}1W n$ t„�yX   d“| }/t„|/ƒ‚Y n0 |0t�_›|1t�_œ|jE�r|jE}| ˜d�¡dk�r”d”| }/t„|/ƒ‚| ™d‘d’¡}d }2d }3z(t…| šd�¡d ƒ}2t…| šd�¡d ƒ}3W n$ t„�yô   d•| }/t„|/ƒ‚Y n0 |2t�_�|3t�_ž|2t�_Ÿ|3t�_ |jt _|jt _dt _
|jt _dt _dt _Udt _pdt _G|jDt _D|jEt _E|jFt _F|jt _|jt _|j?t _x|jHt _w|jIt _¡dt _u|jt _|jZt _Z|j[t _[|jt _|jRt _R|jSt _S|j0t _0|j1t _1|j2t _2|jQt _Qdt _¢t�j£t _¤t�j¥t _¦i t _§i t _¨i t _©i t _ªi t _«i t _¬d t _­d t _®d t _¯dt _°dt _vdt _=dt _±dt _²g t _³dt _´dt _µd t _¶d t _·d t _¸t j[�r‚t j[ ™d–d‘¡t)j¹_ºt» ¼t)j*j+d— |j/¡ t½ ¾¡  t¿ À¡  |S )˜Nr   )ÚBaseCaseÚtest_methodÚchromeTFÚhttpÚ	localhosti\  Útestz--é   ú-é   ÚbrowserÚtruezO
The "browser" argument requires a value!
Choose from %s.
Eg. -D browser="edge"zO
"%s" is not a valid "browser" selection!
Choose from %s.
Eg. -D browser="edge"ÚheadlessÚ	headless1Ú	headless2)ÚheadedÚguiÚxvfb)zxvfb-metricsÚxvfb_metrics)z
start-pageÚ
start_pageÚurl)zlocale-codeÚlocale_codeÚlocale)ZpdbZipdbÚprotocol)r   Úhttpszn
The Selenium Grid "protocol" argument requires a value!
Choose from ["http", "https"]
Eg. -D protocol="https"zn
"%s" is not a valid Selenium Grid "protocol" selection!
Choose from ["http", "https"]
Eg. -D protocol="https")ÚserverÚ
servernameÚportÚdataÚvar1Úvar2Úvar3Ú	variablesÚ{Ú}z^
Expecting a Python dictionary for "variables"!
Eg. -D variables="{'KEY':'VALUE', 'KEY2':123}"ÚaccountÚenvironmentzM
The "env" argument requires a value!
Choose from %s.
Eg. -D env="production"zM
"%s" is not a valid "env" selection!
Choose from %s.
Eg. -D env="production")z
user-agentÚ
user_agentZagent)Ú	incognitozincognito-modeZincognito_mode)Zguestz
guest-modeÚ
guest_mode)Zdarkz	dark-modeÚ	dark_mode)Údevtoolszopen-devtoolsZopen_devtools)Zmobilezmobile-emulatorÚmobile_emulator)Zmetricszdevice-metricsÚdevice_metrics)Zcrxzextension-zipÚextension_zip)zextension-dirÚextension_dir)zbinary-locationÚbinary_locationÚbl)zuse-chromiumZ
_chromium_)Úcftr@   )ÚchsrA   )zdriver-versionÚdriver_version)Zplszpage-load-strategyÚpage_load_strategy)ÚnormalÚeagerÚnonezq
The "pls" / "page-load-strategy" arg requires a value!
Choose from ["normal", "eager", "none"]
Eg. -D pls="none"zr
"%s" is not a valid "pls" / "page-load-strategy" value!
Choose from ["normal", "eager", "none"]
Eg. -D pls="none")zdatabase-envÚdatabase_envz_
The "database-env" argument requires a value!
Choose from %s.
Eg. -D database-env="production"z_
"%s" is not a valid "database-env" selection!
Choose from %s.
Eg. -D database-env="production")zarchive-logsÚarchive_logs)zdisable-cookiesÚdisable_cookies)z
disable-jsÚ
disable_js)zdisable-cspÚdisable_cspZdcsp)z
disable-wsÚ
disable_wsZdws)z	enable-wsÚ	enable_ws)zenable-syncÚenable_sync)zuse-auto-extÚuse_auto_extzauto-ext)Z
undetectedÚundetectableZuc)zuc-cdp-eventsÚuc_cdp_eventszuc-cdp)zuc-subprocessÚuc_subprocesszuc-sub)zlog-cdp-eventsÚlog_cdp_eventszlog-cdp)z
no-sandboxÚ
no_sandbox)zdisable-gpuÚdisable_gpu)Úrszreuse-sessionÚreuse_session)ZrcsZrfszreuse-class-sessionzreuse-feature-sessionZcrumbs)zdisable-beforeunloadZdisable_beforeunload)Zsjwzskip-js-waitsZskip_js_waits)Zwfazwait-for-angularjsZwait_for_angularjs)zvisual-baselineÚvisual_baselineZwire)zwindow-positionÚwindow_position)zwindow-sizeÚwindow_size)ZmaximizeZ
fullscreenzmaximize-windowZmaximize_window)Z
screenshotzsave-screenshotÚsave_screenshotÚss)zno-screenshotÚno_screenshotÚns)ztimeout-multiplierÚtimeout_multiplier)zwith-db-reportingzwith-db_reporting)zwith-s3-loggingzwith-s3_logging)zcheck-jsZcheck_js)ZrecorderÚrecordZrecZcodegen)z
rec-behavezrec-gherkin)zrecord-sleepz	rec-sleep)z	rec-print)ZslowZslowmoz	slow-modeÚ	slow_mode)Údemoz	demo-modeÚ	demo_mode)z
time-limitÚ
time_limitZ	timelimit)z
demo-sleepÚ
demo_sleepÚ	dashboard)z
dash-titleÚ
dash_title)zmessage-durationÚmessage_duration)zblock-imagesÚblock_images)zdo-not-trackÚdo_not_track)zexternal-pdfÚexternal_pdf)zremote-debugÚremote_debugzremote-debugger)r   zsettings-fileÚsettings_file)zuser-data-dirÚuser_data_dir)zchromium-argÚchromium_arg)zfirefox-argÚfirefox_arg)zfirefox-prefÚfirefox_pref)zdisable-featuresÚdisable_features)Úproxyzproxy-serverzproxy-string)zproxy-bypass-listÚproxy_bypass_list)zproxy-pac-urlzpac-url)zmulti-proxyÚmulti_proxy)zhost-resolver-rulesÚhost_resolver_rules)zenable-3d-apisÚenable_3d_apisÚswiftshader)Zadblockzad-blockZad_blockz	block-adsZ	block_adsÚ
highlightsÚinterval)zcap-fileÚcap_fileÚ
cap_stringzC
Only ONE default browser is allowed!
%s browsers were selected: %s)ZoperaZbraveÚcometZatlasZfirefox)r   ÚedgezS

  Recorder Mode ONLY supports Chrome and Edge!
  (Your browser choice was: "%s")
zÁ(Linux uses "-D headless" by default. To override, use "-D headed" / "-D gui". For Xvfb mode instead, use "-D xvfb". Or you can hide this info by using"-D headless" / "-D headless2" / "-D uc".)ZsafariÚ443r(   ú,zF

  window_position expects an "x,y" string!
  (Your input was: "%s")
ú Ú zL

  Expecting integer values for "x,y"!
  (window_position input was: "%s")
zJ

  window_size expects a "width,height" string!
  (Your input was: "%s")
zQ

  Expecting integer values for "width,height"!
  (window_size input was: "%s")
Ú_ú/)Ár   r   Úseleniumbaser   r   r   Z	is_behaver   r   r   Zheadless_activer   r!   r"   r#   r%   Z
pdb_optionr'   r*   r+   r,   r-   r.   r/   r0   r3   r4   Úenvr5   r6   r7   r8   r9   r:   r;   r<   r=   r>   rB   rC   rG   r
   ÚLogsÚLATESTÚosÚsepÚlog_pathrH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   Ú_multithreadedZ_reuse_sessionZ_reuse_class_sessionZ_crumbsZ_disable_beforeunloadrX   Zuse_wirerY   rZ   Zmaximize_optionZis_context_managerZsave_screenshot_after_testZno_screenshot_after_testr_   Zpytest_html_reportZwith_db_reportingZwith_s3_loggingZjs_checking_onZrecorder_modeZrecorder_extZrecord_sleepZ
rec_behaveZ	rec_printZ	report_onZ	is_pytestra   rc   rd   re   rf   rg   Z_dash_initializedrh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   Úproxy_stringrt   Úproxy_pac_urlru   rv   rw   rx   Zad_block_onZis_nosetestry   rz   r{   r|   Ú	_has_logsÚ_has_exceptionr[   Zreuse_class_sessionÚsetZValidBrowsersÚvalid_browsersZ	ValidEnvsÚ
valid_envsr   ÚuserdataÚkeysÚ
startswithÚlowerÚaddÚ	ExceptionÚintÚ
isinstanceÚstrÚlenÚendswithÚastÚliteral_evalÚdictr   ZSKIP_JS_WAITSZWAIT_FOR_ANGULARJSr   Zget_binary_locationÚpathÚexistsZ_cdp_browserZ_cdp_bin_locÚis_linuxÚprintÚcountÚreplaceÚsplitZWINDOW_START_XZWINDOW_START_YZCHROME_START_WIDTHZCHROME_START_HEIGHTZHEADLESS_START_WIDTHZHEADLESS_START_HEIGHTr]   Z_is_timeout_changedZSMALL_TIMEOUTZ_SMALL_TIMEOUTZLARGE_TIMEOUTZ_LARGE_TIMEOUTZ_recorded_actionsZ_behave_recorded_actionsÚ_resultsÚ	_durationÚ_display_idÚ_d_t_log_pathZ
_dash_htmlZ_test_idZ_latest_display_idZ_dashboard_initializedZ_only_unittestZ_sbase_detectedZ_extra_dash_entriesZ_using_html_reportZ_dash_is_html_reportÚ_saved_dashboard_pieZ_dash_final_summaryZ_html_report_nameÚ	DashboardZTITLEr   Zlog_folder_setupr   Zreset_downloads_folderr   Úremove_proxy_zip_if_present)4Úcontextr   ÚsbZbrowsersr’   r“   r”   ÚkeyZlow_keyr   r"   r#   r'   r*   r+   r0   Z	bad_inputr4   r5   r;   r<   r=   r>   rB   rC   rG   rY   rZ   r_   rd   re   rh   rm   rn   ro   rp   rq   rr   r�   rt   rŽ   rv   ry   rz   r{   r|   Zbin_locÚmessageZwin_xZwin_yÚwidthÚheightr   r   r   Úget_configured_sbŒ   sV   



þÿþÿ
















ÿþÿ












 ÿþ

ÿ




þÿþÿ



















ÿþÿ


þÿýÿ





















































































ÿÿÿþýÿÿÿþýüûÿÿÿþþýýÿÿþÿÿÿÿÿÿr¶   c                 C   sX   |   dd¡  dd¡} t dd|¡}|  dd¡}d|v rH| d	¡d
  ¡ }d| |f }|S )Nr„   Ú.ú\ú[^\w_ ]r‚   r�   rƒ   ú -- @ú # r   ú%s.%s)r§   ÚreÚsubr¨   Úrstrip©Ú	file_nameÚscenario_nameÚtest_idr   r   r   Úcalculate_test_idD  s    rÄ   c                 C   s,   d|v r|  d¡d  ¡ }d| ||f }|S ©Nrº   r»   r   z%s:%s => %s)r¨   r¿   ©rÁ   Úline_numrÂ   Ú
display_idr   r   r   Úcalculate_display_idN  s    rÉ   c                  C   sh   t jj} |  dd¡ dd¡} t jj}d|v r>| d¡d  ¡ }t dd|¡}| d	d
¡}d| |f }|S )Nr„   r·   r¸   rº   r»   r   r¹   r‚   r�   rƒ   r¼   )	r   Úbehave_scenarioÚfilenamer§   Únamer¨   r¿   r½   r¾   rÀ   r   r   r   Úget_test_idU  s    rÍ   c                  C   sH   t jj} tt jjƒ}t jj}d|v r6| d¡d  ¡ }d| ||f }|S rÅ   )r   rÊ   rË   rœ   ÚlinerÌ   r¨   r¿   rÆ   r   r   r   Úget_display_ida  s    rÏ   c                  C   s   t ƒ } tƒ }| |fS ©N)rÍ   rÏ   )rÃ   rÈ   r   r   r   Ú_get_test_ids_k  s    rÑ   c                  C   s¸  dd l } tjdd … }d |¡}| dd¡}| dd¡}| jd| | jdd	�}| ¡ \}}d}g }d}g }	d}
g }dt_	dt_
dt_dt_dt_d }d }d }tr¬| d
¡}n
| d¡}| dd¡ d¡D �]â}| d¡�r¼|d7 }|d7 }| d¡d }d|v �r2| d¡d }d| d¡d  }| d¡d }ndd|v �rl| d¡d }d| d¡d  }| d¡d }n*| d¡d }| d¡d }| d¡d }| ¡ }| |¡ | ¡ }|	 |¡ qÈ| d¡�sÒ| d¡rÈ| d¡d }|
d7 }
d }| d¡�r| d¡d }n| d¡d }d|v �r4| d¡d  ¡ }n(d|v �rN| d¡d }n| d¡d }| ¡ }| |¡ t||ƒ}t|||ƒ}dtj|< dtj|< |tj|< d tj|< qÈ|
t_	d S )Nr   r   r�   z--quietr‚   z-qzbehave -d %s --show-sourceT)ÚstdoutÚshellÚlatin1úutf-8úÚ
z	Feature: z # features/éÿÿÿÿz	features/ú:z # features\z	features\r»   z  Scenario: z  Scenario Outline: rº   ZUntestedr   )Ú
subprocessÚsysÚargvÚjoinr§   ÚPopenÚPIPEÚcommunicater   Ú
item_countZitem_count_passedZitem_count_failedZitem_count_skippedÚitem_count_untestedÚ
is_windowsÚdecoder¨   r–   ÚstripÚappendr¿   rÄ   rÉ   r©   rª   r«   r¬   )rÚ   Úcommand_argsZcommand_stringÚprocÚoutputÚerrorZfilename_countZfilename_listZfeature_countZfeature_listZscenario_countZscenario_listrË   Zfeature_namerÂ   ÚrowrÇ   rÃ   rÈ   r   r   r   Údashboard_pre_processingq  s”    
ý



ÿþ



ÿ


rì   c                  C   sd  ddl m}  ddlm} tj d¡}tj |d¡}tj |¡sHt 	|¡ tj |d¡}d}tj |¡r¬d }t
|dd	��}| ¡ }W d   ƒ n1 s”0    Y  ||ƒ kr¬d
}|rÒt
|ddd�}| |ƒ ¡ | ¡  tj |d¡}	d}
tj |	¡�r:d }t
|	dd	��}| ¡ }W d   ƒ n1 �s"0    Y  || k�r:d
}
|
�r`t
|	ddd�}| | ¡ | ¡  d S )Nr   )Úlive_js)Úget_pytest_styler·   Zassetszpytest_style.cssTÚr©ÚmodeFzw+rÕ   ©rñ   Úencodingzlive.js)Zseleniumbase.js_code.live_jsrí   Zseleniumbase.core.style_sheetrî   r‰   r¢   ÚabspathrÝ   r£   ÚmakedirsÚopenÚreadÚ
writelinesÚclose)rí   rî   Úabs_pathZassets_folderZpytest_style_cssZadd_pytest_style_cssZexisting_pytest_styleÚfÚout_fileZlive_js_fileZadd_live_js_fileZexisting_live_jsr   r   r   Ú_create_dashboard_assets_Å  s<    
&
(

rý   c                  C   sÄ   t jdkrÀtƒ  t jt _tj t ¡ d¡} tdƒt| ƒ }t	t
ƒ�. t ¡ j}|dkrb||krb|}W d  ƒ n1 sv0    Y  d| }d}d}ts¬tjjtjj }tjj}td|| ||f ƒ dS )	z3Print the dashboard path if at least one test runs.r   údashboard.htmlúDashboard: é   NÚ*r‚   zDashboard: %s%s%s
%s)r   rá   rý   râ   r‰   r¢   rÝ   Úgetcwdr�   r   r™   Úget_terminal_sizeÚcolumnsr¤   ÚcoloramaÚForeZBLUEÚBackZLIGHTCYAN_EXÚStyleÚ	RESET_ALLr¥   )Ú	dash_pathZstar_lenÚterminal_sizeÚstarsÚc1Úcrr   r   r   Úbehave_dashboard_prepareç  s     


"r  c                  C   sœ  t tdƒrtjst ¡  t tdƒr~tjr~tjrxz&trHtjdksHtjj	j
rRtj ¡  W n" tyf   Y n tyv   Y n0 d t_t tdƒržt tjjd tj¡ t ¡  t tdƒr¶tjsºd S d} tjj}d}d	}d
}d}d}tj ¡ }tj ¡ }d| }	d| }
�zptj d¡}tj |d¡}tj |¡�rnd }t|ddd��}|  ¡ }W d   ƒ n1 �s\0    Y  tj!�r‚dt"j#v �r‚tdƒ‚tj!�rütjj$}tj ||¡}tj |¡�rüdd l%}t|dd��}|  ¡  &¡ }W d   ƒ n1 �sæ0    Y  | '|¡t_(| )||¡}| )||¡}| )||¡}| )|	|
¡}|| 7 }t|ddd��}| *|¡ W d   ƒ n1 �sd0    Y  W n& t+�y„   Y n t�y–   Y n0 d S )Nru   rW   ÚierH   r„   rf   z
<!--Test Run Complete-->r‚   z2Awaiting results... (Refresh the page for updates)zATest Run ENDED: Some results UNREPORTED due to skipped tearDown()z$<td class="col-result">Untested</td>z&<td class="col-result">Unreported</td>z	href="%s"r·   rþ   rï   rÕ   rò   z-czBreak out of "try" block.r   rð   Úw),Úhasattrr   ru   r   r¯   rW   Zshared_driverrã   r   ÚserviceÚprocessÚquitÚAttributeErrorr™   r   Zarchive_logs_if_setr
   r‡   rˆ   rH   Zclear_empty_logsrf   r®   ZMETA_REFRESH_HTMLZget_dash_pie_1Zget_dash_pie_2r‰   r¢   rô   rÝ   r£   rö   r÷   rŒ   rÛ   rÜ   ZDASH_PIEÚjsonrå   Úloadsr­   r§   ÚwriteÚKeyboardInterrupt)ZstampZfind_itZ	swap_withZ	find_it_2Zswap_with_2Z	find_it_3Zswap_with_3ZDASH_PIE_PNG_1ZDASH_PIE_PNG_2Z	find_it_4Zswap_with_4rú   Zdashboard_pathZ
the_html_drû   Zdash_pie_locZpie_pathr  Zdash_pier   r   r   Ú_perform_behave_unconfigure_ü  s€    ÿþý
ÿÿ

(,.r  c                   C   s^   t tƒ�B ttdƒr<tjr<tr2tjdks2tjjjr<tj 	¡  W d   ƒ n1 sP0    Y  d S )NÚlast_driverr  )
r   r™   r  r   r  rã   r   r  r  r  r   r   r   r   Ú!do_final_driver_cleanup_as_neededG  s    
ÿþýr  c                  C   st  t j t  ¡ tjjt j ¡} t j t  ¡ d¡}tdƒt|ƒ }t	t
ƒ�. t  ¡ j}|dkrf||krf|}W d   ƒ n1 sz0    Y  d|d  }d}d}ts´tjjtjj }tjj}tjrÌtd|||f ƒ tjsÞtjsÞtjrðtd||| f ƒ tj�rtj�stj�std	| ƒ nZtj�sDtj�s.tj�rDtd	|dd …  ƒ n,tj�rptj�s\tj�rptd	|dd …  ƒ d S )
Nrþ   rÿ   r   ú=r   r‚   z%s- Dashboard:%s %sz%s--- LogPath:%s %sz%s)r‰   r¢   rÝ   r  r
   r‡   rˆ   rŠ   r�   r   r™   r  r  r¤   r  r  ZMAGENTAr  ZLIGHTYELLOW_EXr  r	  r   rf   r¥   r�   r[   r�   )Zlatest_logs_dirr
  Z
equals_lenr  ÚequalsÚc2r  r   r   r   Ú!_perform_behave_terminal_summary_R  sZ    ÿ

"ÿþýÿþþÿþþÿþþr!  c                 C   s"   t | ƒ| _| jjrtƒ  tƒ  d S rÐ   )r¶   r±   rf   rì   r  ©r°   r   r   r   Ú
before_all€  s    
r#  c                 C   s   |t _t ¡  d S rÐ   )r   Úbehave_featurer	   Ú"end_reused_class_session_as_needed©r°   Úfeaturer   r   r   Úbefore_feature‡  s    r(  c                 C   s(   | t _|t _|jt _dt _| j ¡  d S )Nr   )r   Úbehave_contextrÊ   rÎ   Zbehave_line_numÚbehave_step_countr±   ZsetUp)r°   Úscenarior   r   r   Úbefore_scenarioŒ  s
    r,  c                 C   s   t  jd7  _|t _d S )Nr   )r   r*  Úbehave_step)r°   Ústepr   r   r   Úbefore_step”  s    r/  c                 C   sH   |t _|jdkrDt j}td||jf ƒ tdt jjƒ tdt jjƒ d S )NÚfailedz>>> STEP FAILED:  (#%s) %szClass / Feature: zTest / Scenario: )r   r-  Ústatusr*  r¥   rÌ   r$  rÊ   )r°   r.  Únumberr   r   r   Ú
after_step™  s    
r3  c                 C   s&   | j }|jt_| t_|t_| ¡  d S rÐ   )r±   Zdriverr   r  r)  rÊ   ZtearDown)r°   r+  r±   r   r   r   Úafter_scenario¢  s
    r4  c                 C   s   |t _t ¡  d S rÐ   )r   r'  r	   r%  r&  r   r   r   Úafter_featureª  s    r5  c                 C   s   t ƒ  tƒ  tƒ  d S rÐ   )r  r  r!  r"  r   r   r   Ú	after_all¯  s    r6  ).Ú__doc__rŸ   r  r‰   r½   rÛ   Ú
contextlibr   r…   r   r   Zseleniumbase.configr   Zseleniumbase.corer   r   r   r   r	   Zseleniumbase.fixturesr
   r   r¤   rã   r   r   r¶   rÄ   rÉ   rÍ   rÏ   rÑ   rì   rý   r  r  r  r!  r#  r(  r,  r/  r3  r4  r5  r6  r   r   r   r   Ú<module>   s\   k       ?

T"K.	