a
    7ñ»jÕ…  ã                   @   s@   d Z ddlZddlZddlZddd„Zdd„ Zedkr<eƒ  dS )	a#  
Creates a new folder for running SeleniumBase scripts.

Usage:
    seleniumbase mkdir [DIRECTORY] [OPTIONS]
    OR     sbase mkdir [DIRECTORY] [OPTIONS]

Example:
    sbase mkdir ui_tests

Options:
    -b / --basic  (Only config files. No tests added.)
    --gha  (Include GitHub Actions YML with defaults.)

Output:
    Creates a new folder for running SBase scripts.
    The new folder contains default config files,
    sample tests for helping new users get started,
    and Python boilerplates for setting up customized
    test frameworks.
é    Nc                 C   s¸   d}|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d	7 }|d
7 }|d7 }|d7 }|d7 }|d7 }|d7 }| s†t d| ƒ‚n.| dkr¤td| ƒ t ¡  nt d|| f ƒ‚d S )Nz  ** mkdir **

z	  Usage:
z.     seleniumbase mkdir [DIRECTORY] [OPTIONS]
z.     OR     sbase mkdir [DIRECTORY] [OPTIONS]
z  Example:
z     sbase mkdir ui_tests
z  Options:
z8     -b / --basic  (Only config files. No tests added.)
z8     --gha  (Include GitHub Actions YML with defaults.)
z
  Output:
z5     Creates a new folder for running SBase scripts.
z3     The new folder contains default config files,
z5     sample tests for helping new users get started,
z7     and Python boilerplates for setting up customized
z     test frameworks.
zINVALID RUN COMMAND!

%sÚhelpz
%szINVALID RUN COMMAND!

%s
%s
)Ú	ExceptionÚprintÚsysÚexit)ÚmsgÚexp© r	   úKE:\soccer\ml_env\Lib\site-packages\seleniumbase/console_scripts/sb_mkdir.pyÚinvalid_run_command   s*    
r   c                  C   sÄ  d} d}d}d}dt jvrRtjjtjj } tjjtjj }tjj	tjj
 }tjj}d}d}d}d }d }t jdd … }	|	d }
|
dksŒ|
dkr–tdƒ ndtt|
ƒƒdk r¬d	}nNd
t|
ƒv sÄdt|
ƒv rÊd}n0|
 d¡rÚd}n tj t ¡ d
 |
 ¡rúd|
 }|�r|d | | }t|ƒ t|	ƒdk�rì|	dd … }|D ]´}| ¡ }|dk�sV|dk�r\d}nŒ|dk�sp|dk�rvd}nr|dk�r†d}nbd| }| dd| d ¡}| dd| d ¡}| d|d | ¡}| d|d | ¡}d} �qì�q6|�rút|ƒ t |
¡ g }d}zddlm} dt|ƒ }W n t�y<   Y n0 | |¡ | d¡ d|
d f }t|d!d"d#�}| d$ |¡¡ |  ¡  g }| d%¡ | d&¡ | d'¡ | d(¡ | d)¡ | d*¡ | d+¡ | d,¡ | d-¡ | d.¡ | d/¡ | d0¡ | d1¡ | d2¡ | d3¡ | d4¡ | d5¡ | d6¡ | d7¡ | d8¡ | d9¡ | d:¡ | d;¡ | d<¡ | d=¡ | d>¡ | d?¡ | d@¡ | dA¡ | dB¡ | dC¡ | d¡ d|
dDf }t|d!d"d#�}| d$ |¡¡ |  ¡  g }| dE¡ | dF¡ | dG¡ | d¡ | dH¡ | dI¡ | dJ¡ | d¡ | dK¡ | dL¡ | dM¡ d|
dNf }t|d!d"d#�}| d$ |¡¡ |  ¡  g }| d¡ d|
dOf }t|d!d"d#�}| d$ |¡¡ |  ¡  g }| dP¡ | dQ¡ | dR¡ | dS¡ | dT¡ | dU¡ | dV¡ | dW¡ | dX¡ | dY¡ | dZ¡ | d[¡ | d\¡ | d]¡ | d^¡ | d_¡ | d`¡ | da¡ | db¡ | dc¡ | dd¡ | de¡ | df¡ | dg¡ | dh¡ | di¡ | dj¡ | dk¡ | dl¡ | dm¡ | dn¡ | do¡ | dp¡ | dq¡ | dr¡ | ds¡ | dt¡ | du¡ | dv¡ | dw¡ | dx¡ | dy¡ | dz¡ | d{¡ | d|¡ | d}¡ | d~¡ | d¡ | d€¡ | d�¡ | d‚¡ | dƒ¡ | d„¡ | d…¡ | d†¡ | d‡¡ | dˆ¡ | d‰¡ | dŠ¡ | d‹¡ | dŒ¡ | d�¡ | dŽ¡ | d�¡ | d�¡ | d‘¡ | d’¡ | d“¡ | d”¡ | d•¡ | d–¡ | d—¡ | d˜¡ | d™¡ | dš¡ | d›¡ | dœ¡ | d�¡ | dž¡ | dŸ¡ | d ¡ | d¡¡ | d¢¡ | d£¡ | d¤¡ | d¥¡ | d¦¡ | d§¡ | d¨¡ | d©¡ | dª¡ | d«¡ | d¬¡ | d­¡ | d®¡ | d¯¡ | d°¡ | d±¡ | d²¡ | d³¡ | d´¡ | dµ¡ | d¶¡ | d·¡ | d¸¡ | d¹¡ | dº¡ | d»¡ | d¼¡ | d½¡ | d¾¡ | d¿¡ | dÀ¡ | dÁ¡ | dÂ¡ | dÃ¡ | dÄ¡ | dÅ¡ | dÆ¡ | dÇ¡ | dÈ¡ | dÉ¡ | dÊ¡ | dË¡ | dÌ¡ | dÍ¡ | dÎ¡ | dÏ¡ | dÐ¡ | dÑ¡ | dÒ¡ | dÓ¡ | dÔ¡ | dÕ¡ | dÖ¡ | d×¡ d|
dØf }t|d!d"d#�}| d$ |¡¡ |  ¡  |�rŒ|
d
 dÙ }t |¡ |d
 dÚ }t |¡ g }| dÛ¡ | dÜ¡ | dÝ¡ | dÞ¡ | dß¡ | dÞ¡ | dà¡ | dÞ¡ | dá¡ | dâ¡ | dã¡ | dä¡ | då¡ | dæ¡ | dç¡ | dè¡ | dé¡ | dê¡ | dë¡ | dì¡ | dí¡ | dî¡ | dï¡ | dð¡ | dñ¡ | dò¡ | dó¡ | dô¡ | dõ¡ | dö¡ | d÷¡ | dø¡ | dù¡ | dú¡ | dû¡ | dü¡ | dý¡ | dþ¡ | dÿ¡ | dð¡ | �d ¡ | �d¡ | �d¡ | d¡ d|�df }t|d!d"d#�}| d$ |¡¡ |  ¡  |�r~g }| �d|
 ¡ |�rÐ| �d¡ | �d¡ | �d¡ | �d¡ | �d	¡ | �d
¡ | �d¡ d|
�df }t|d!d"d#�}| d$ |¡¡ |  ¡  t !�d| ¡ t "|¡ �d|  �d |
 �d | �d }t#|ƒ d S g }| �d¡ | �d¡ | d¡ | d¡ | �d¡ | �d¡ | �d¡ | �d¡ | �d¡ | �d¡ | �d¡ | �d¡ | �d¡ | �d¡ | �d¡ | �d¡ | �d¡ | �d ¡ | �d!¡ | �d"¡ | �d#¡ | �d¡ | �d$¡ | �d%¡ | �d&¡ | �d'¡ | �d(¡ | d¡ d|
�d)f }t|d!d"d#�}| d$ |¡¡ |  ¡  g }| �d¡ | �d¡ | d¡ | d¡ | �d*¡ | �d+¡ | �d,¡ | �d-¡ | �d.¡ | �d/¡ | �d0¡ | �d1¡ | �d2¡ | �d3¡ | �d4¡ | �d5¡ | �d6¡ | �d7¡ | �d8¡ | �d9¡ | �d:¡ | �d;¡ | �d<¡ | �d=¡ | �d>¡ | �d?¡ | �d@¡ | �dA¡ | �dB¡ | �dC¡ | �dD¡ | �dE¡ | �dF¡ | �dG¡ | �dH¡ | �dI¡ | �dF¡ | �dJ¡ | �dK¡ | �dL¡ | �dM¡ | �dN¡ | �dO¡ | �dP¡ | �dQ¡ | �dR¡ | �dS¡ | �dT¡ | �dU¡ | �dV¡ | �dW¡ | �dX¡ | �dY¡ | �dZ¡ | �d[¡ | �d\¡ | �dF¡ | �d]¡ | �d^¡ | �d_¡ | �d`¡ | �da¡ | �db¡ | �dc¡ | �dd¡ | �de¡ | �df¡ | �dg¡ | �dh¡ | �di¡ | d¡ d|
�djf }t|d!d"d#�}| d$ |¡¡ |  ¡  g }| �dk¡ | �d¡ | �d¡ | d¡ | d¡ | �dl¡ | �dm¡ | �dn¡ | �do¡ | �dp¡ | �dq¡ | �dr¡ | �ds¡ | �dt¡ | �du¡ | �dv¡ | �dw¡ | �dx¡ | �dy¡ | d¡ d|
�dzf }t|d!d"d#�}| d$ |¡¡ |  ¡  |
d
 �d{ }t |¡ g }| d¡ d|dOf }t|d!d"d#�}| d$ |¡¡ |  ¡  g }| �d¡ | �d¡ | d¡ | d¡ | �d|¡ | �d}¡ | �d~¡ | �d¡ | d¡ | �d€¡ | �d�¡ | �d‚¡ | �dƒ¡ | �d„¡ | �d…¡ | �d†¡ | �d„¡ | �d‡¡ | �dˆ¡ | �d‰¡ | d¡ | �dŠ¡ | �d‹¡ | �dŒ¡ | d¡ | �d�¡ | �d‹¡ | �dŒ¡ | d¡ d|�dŽf }t|d!d"d#�}| d$ |¡¡ |  ¡  g }| �d�¡ | �d�¡ | d¡ d|�d‘f }t|d!d"d#�}| d$ |¡¡ |  ¡  g }| �d’¡ | �d“¡ | d¡ | d¡ | �d”¡ | �d•¡ | �d–¡ | �d—¡ | �d˜¡ | d¡ d|�d™f }t|d!d"d#�}| d$ |¡¡ |  ¡  g }| �d¡ | �d¡ | d¡ | d¡ | �dš¡ | �d›¡ | �dœ¡ | d¡ | �d�¡ | �dž¡ | d¡ | d¡ | �dŸ¡ | �d ¡ | �d¡¡ | �d¢¡ | �d£¡ | d¡ d|�d¤f }t|d!d"d#�}| d$ |¡¡ |  ¡  g }| �dš¡ | �d›¡ | �dœ¡ | d¡ | �d�¡ | �dž¡ | d¡ | d¡ | �d¥¡ | �d¦¡ | �d§¡ | �d¨¡ | �d©¡ | d¡ d|�dªf }t|d!d"d#�}| d$ |¡¡ |  ¡  |d
 �d« }t |¡ g }| d¡ d|dOf }t|d!d"d#�}| d$ |¡¡ |  ¡  g }| �d¡ | �d¬¡ | �d­¡ | d¡ | d¡ | �d®¡ | �d¯¡ | �d°¡ | �d±¡ | �d²¡ | �d³¡ | �d´¡ | �dµ¡ | �d¶¡ | �dy¡ | �d·¡ | �d¸¡ | �d¹¡ | �dº¡ | �d»¡ | d¡ d|�d¼f }t|d!d"d#�}| d$ |¡¡ |  ¡  g }| �d½¡ | �d¾¡ | �d¿¡ | �dÀ¡ | �dÁ¡ | d¡ | d¡ | �dÂ¡ | �dÃ¡ | d¡ d|�dÄf }t|d!d"d#�}| d$ |¡¡ |  ¡  g }| �dÅ¡ | d¡ | �d¡ | �d¡ | d¡ | d¡ | �dÆ¡ | �dÇ¡ | �dÈ¡ | �dÉ¡ | �dÊ¡ | �dË¡ | d¡ | d¡ | �dÌ¡ | �dÍ¡ | �dÎ¡ | �dÏ¡ | �dÐ¡ | �d'¡ | �d(¡ | d¡ d|�dÑf }t|d!d"d#�}| d$ |¡¡ |  ¡  g }| �dÒ¡ | d¡ | d¡ | �dÆ¡ | �dÇ¡ | �dÈ¡ | �dÉ¡ | �dÊ¡ | �dË¡ | d¡ | d¡ | �dÓ¡ | �dÔ¡ | �dÕ¡ | �dÖ¡ | �d×¡ | �dØ¡ | �dÙ¡ | d¡ d|�dÚf }t|d!d"d#�}| d$ |¡¡ |  ¡  g }| �d|
 ¡ |�r| �d¡ | �d¡ | �d¡ | �d¡ | �dÛ¡ | �dÜ¡ | �d	¡ | �d
¡ | �dÝ¡ | �dÞ¡ | �dß¡ | �dà¡ | �dá¡ | �dâ¡ | �dã¡ | �dä¡ | �då¡ | �dæ¡ | �dç¡ | �dè¡ | �dé¡ | �dê¡ | �dë¡ d|
�df }t|d!d"d#�}| d$ |¡¡ |  ¡  d|v�r\t !�d| ¡ n.�dì|v�rzt !�dí| ¡ nt !�dî| ¡ t "|¡ �d|  �d |
 �dï | �d }t#|ƒ d S (ð  NÚ ÚlinuxFé   r   z-hz--helpr   z9Directory name length must be at least 2 characters long!ú/ú\z3Directory name must not include slashes ("/", "\")!ú-z%Directory name cannot start with "-"!z0Directory "%s" already exists in this directory!zERROR: é   Tz-bz--basicz--ghaz
===> INVALID OPTION: >> %s <<
z>> z>>ú z <<z<<Úseleniumbase)Ú__version__zseleniumbase>=%sz%s/%szrequirements.txtzw+zutf-8)ÚmodeÚencodingz
z[pytest]z/addopts = --capture=tee-sys -p no:cacheproviderz4norecursedirs = .* build dist recordings temp assetszfilterwarnings =z     ignore::pytest.PytestWarningz5    ignore:.*U.*mode is deprecated:DeprecationWarningzjunit_family = legacyz8python_files = test_*.py *_test.py *_tests.py *_suite.pyz1python_classes = Test* *Test* *Test *Tests *Suitezpython_functions = test_*z	markers =z    marker1: custom markerz    marker2: custom markerz    marker3: custom markerz$    marker_test_suite: custom markerz#    expected_failure: custom markerz    local: custom markerz    remote: custom markerz    offline: custom markerz    develop: custom markerz    qa: custom markerz    ci: custom markerz    e2e: custom markerz    ready: custom markerz    smoke: custom markerz    deploy: custom markerz    active: custom markerz    master: custom markerz    release: custom markerz    staging: custom markerz    production: custom markerz
pytest.iniz[flake8]zexclude=recordings,tempzignore=W503z[nosetests]znocapture=1zlogging-level=INFOz[behave]zshow_skipped=falsezshow_timings=falsez	setup.cfgz__init__.pyz	*.py[cod]z*.eggz
*.egg-infoÚdistÚbuildz.eggsÚeggsÚpartsÚbinÚvarÚsdistzdevelop-eggsz.installed.cfgÚlibZlib64Ú__pycache__z.envz.venvzenv/zvenv/zENV/zVENV/zenv.bak/z	venv.bak/z.sbasez.sbase*Zseleniumbase_envZseleniumbase_venvZ	sbase_envZ
sbase_venvz
pyvenv.cfgz.PythonÚincludezpip-delete-this-directory.txtzpip-selfcheck.jsonzipython.1.gzznosetests.1z.noseidszpip-log.txtz.swpz	.coveragez.toxzcoverage.xmlznosetests.xmlz.cache/*z.pytest_cache/*z.pytest_configZjunitztest-results.xmlz.ideaz.projectz.pydevprojectz.vscodeZchromedriverZgeckodriverZmsedgedriverZoperadriverZ	uc_driverzMicrosoftWebDriver.exezheadless_ie_selenium.exezIEDriverServer.exezchromedriver.exezgeckodriver.exezmsedgedriver.exezoperadriver.exezuc_driver.exezchrome-mac.zipzchrome-linux.zipzchrome-win.zipz
chrome-maczchrome-linuxz
chrome-winzchrome-mac-arm64.zipzchrome-mac-x64.zipzchrome-linux64.zipzchrome-win64.zipzchrome-win32.zipzchrome-mac-arm64zchrome-mac-x64zchrome-linux64zchrome-win64zchrome-win32z#chrome-headless-shell-mac-arm64.zipz!chrome-headless-shell-mac-x64.zipz!chrome-headless-shell-linux64.zipzchrome-headless-shell-win64.zipzchrome-headless-shell-win32.zipzchrome-headless-shell-mac-arm64zchrome-headless-shell-mac-x64zchrome-headless-shell-linux64zchrome-headless-shell-win64zchrome-headless-shell-win32zlibc++.dylibÚlogsZlatest_logsZlog_archivesZarchived_logszgeckodriver.logzghostdriver.logzpytestdebug.logzreports/*.xmlZlatest_reportZreport_archivesZarchived_reportszhtml_report.htmlzlast_report.htmlzreport.htmlz
report.xmlzdashboard.htmlzdashboard.jsonzdash_pie.jsonzdashboard.lockZallure_reportzallure-reportZallure_resultszallure-resultsZsaved_chartsZsaved_presentationsZtours_exportedZimages_exportedZsaved_cookiesZ
recordingsZvisual_baselinez	.DS_Storezselenium-server-standalone.jarz	proxy.zipz
proxy.lockzverbose_hub_server.datzverbose_node_server.datzip_of_grid_hub.datZdownloaded_filesZarchived_filesZassetsÚtempztemp_*/Znode_modulesz
.gitignorez.githubZ	workflowszname: CI buildzon:z  push:z    branches:z  pull_request:z  workflow_dispatch:zjobs:z  build:z    env:z      PY_COLORS: "1"z    strategy:z      fail-fast: falsez      max-parallel: 15z      matrix:z        os: [ubuntu-latest]z        python-version: ["3.x"]z    runs-on: ${{ matrix.os }}z
    steps:z    - uses: actions/checkout@v6z6    - name: Set up Python ${{ matrix.python-version }}z#      uses: actions/setup-python@v6z      with:z4        python-version: ${{ matrix.python-version }}z     - name: Install dependenciesz      run: |z+        python -m pip install --upgrade pipz'        pip install -r requirements.txtz    - name: Install Chromez&      if: matrix.os == 'ubuntu-latest'z0      run: sudo apt install google-chrome-stablez!    - name: Download chromedriverz!      run: sbase get chromedriverz    - name: Run pytestz0      run: pytest -v -s --rs --crumbs --reruns=1z    - name: Upload artifactsz      if: ${{ always() }}z&      uses: actions/upload-artifact@v6z$        name: seleniumbase-artifactsz        path: ./latest_logs/z!        if-no-files-found: ignorezpython-package.ymlz  %s/u     â”œâ”€â”€ .githubu     â”‚   â””â”€â”€ workflows/u'     â”‚      â””â”€â”€ python-package.ymlu     â”œâ”€â”€ __init__.pyu     â”œâ”€â”€ pytest.iniu     â”œâ”€â”€ requirements.txtu     â””â”€â”€ setup.cfgzoutline.rstzsbase print %s -nÚ
z* Directory "z"" was created with config files! *z!from seleniumbase import BaseCasez!BaseCase.main(__name__, __file__)zclass MyTestClass(BaseCase):z    def test_swag_labs(self):z.        self.open("https://www.saucedemo.com")z0        self.type("#user-name", "standard_user")z0        self.type("#password", "secret_sauce\n")z1        self.assert_element("div.inventory_list")z2        self.assert_text("Products", "span.title")z.        self.click('button[name*="backpack"]')z0        self.click("#shopping_cart_container a")z3        self.assert_text("Your Cart", "span.title")z5        self.assert_text("Backpack", "div.cart_item")z%        self.click("button#checkout")z0        self.type("#first-name", "SeleniumBase")z-        self.type("#last-name", "Automation")z*        self.type("#postal-code", "77123")z$        self.click("input#continue")z.        self.assert_text("Checkout: Overview")z#        self.click("button#finish")zA        self.assert_exact_text("Thank you for your order!", "h2")z6        self.assert_element('img[alt="Pony Express"]')z.        self.js_click("a#logout_sidebar_link")z9        self.assert_element("div#login_button_container")zmy_first_test.pyzclass DemoSiteTests(BaseCase):z    def test_demo_site(self):z;        self.open("https://seleniumbase.io/demo_page.html")z-        self.assert_title("Web Testing Page")z,        self.assert_element("tbody#tbodyId")z+        self.assert_text("Demo Page", "h1")z6        self.type("#myTextInput", "This is Automated")z6        self.type("textarea.area1", "Testing Time!\n")z6        self.type('[name="preText2"]', "Typing Text!")z=        self.assert_text("This is Automated", "#myTextInput")z=        self.assert_text("Testing Time!\n", "textarea.area1")z=        self.assert_text("Typing Text!", '[name="preText2"]')z5        self.assert_text("Automation Practice", "h3")z>        self.hover_and_js_click("#myDropdown", "#dropOption2")z3        self.assert_text("Link Two Selected", "h3")z8        self.assert_text("This Text is Green", "#pText")z        self.click("#myButton")z9        self.assert_text("This Text is Purple", "#pText")z2        self.assert_element('svg[name="svgName"]')z3        self.assert_element('progress[value="50"]')z4        self.press_right_arrow("#myslider", times=5)z4        self.assert_element('progress[value="100"]')z2        self.assert_element('meter[value="0.25"]')z=        self.select_option_by_text("#mySelect", "Set to 75%")z2        self.assert_element('meter[value="0.75"]')z9        self.assert_false(self.is_element_visible("img"))z)        self.switch_to_frame("#myFrame1")z8        self.assert_true(self.is_element_visible("img"))z(        self.switch_to_default_content()z>        self.assert_false(self.is_text_visible("iFrame Text"))z)        self.switch_to_frame("#myFrame2")z=        self.assert_true(self.is_text_visible("iFrame Text"))z<        self.assert_false(self.is_selected("#radioButton2"))z#        self.click("#radioButton2")z;        self.assert_true(self.is_selected("#radioButton2"))z9        self.assert_false(self.is_selected("#checkBox1"))z         self.click("#checkBox1")z8        self.assert_true(self.is_selected("#checkBox1"))z9        self.assert_false(self.is_selected("#checkBox2"))z9        self.assert_false(self.is_selected("#checkBox3"))z9        self.assert_false(self.is_selected("#checkBox4"))z;        self.click_visible_elements("input.checkBoxClassB")z8        self.assert_true(self.is_selected("#checkBox2"))z8        self.assert_true(self.is_selected("#checkBox3"))z8        self.assert_true(self.is_selected("#checkBox4"))z;        self.assert_false(self.is_element_visible(".fBox"))z)        self.switch_to_frame("#myFrame3")z:        self.assert_true(self.is_element_visible(".fBox"))z4        self.assert_false(self.is_selected(".fBox"))z        self.click(".fBox")z3        self.assert_true(self.is_selected(".fBox"))z=        self.assert_element_not_visible("div#drop2 img#logo")z3        self.drag_and_drop("img#logo", "div#drop2")z1        self.assert_element("div#drop2 img#logo")z1        self.assert_link_text("seleniumbase.com")z7        self.assert_link_text("SeleniumBase on GitHub")z0        self.assert_link_text("seleniumbase.io")z1        self.click_link("SeleniumBase Demo Page")z1        self.assert_exact_text("Demo Page", "h1")z        self.highlight("h2")z        if self.headed:z%            self.activate_demo_mode()z.        self.type("input", "Have a Nice Day!")z.        self.assert_text("SeleniumBase", "h2")ztest_demo_site.pyz'from parameterized import parameterizedzclass SearchTests(BaseCase):z    @parameterized.expand(z	        [zG            ["SeleniumBase Commander", "Commander", "GUI / Commander"],zC            ["SeleniumBase Recorder", "Recorder", "Recorder Mode"],z@            ["SeleniumBase Syntax", "Syntax", "Syntax Formats"],z	        ]z    )zJ    def test_parameterized_search(self, search_term, keyword, title_text):zD        self.open("https://seleniumbase.io/help_docs/how_it_works/")z7        self.type('[aria-label="Search"]', search_term)z3        self.click('mark:contains("%s")' % keyword)z.        self.assert_title_contains(title_text)z&        self.save_screenshot_to_logs()zparameterized_test.pyZboilerplateszclass BaseTestCase(BaseCase):z    def setUp(self):z        super().setUp()z8        # <<< Run custom code AFTER the super() line >>>z    def tearDown(self):z'        self.save_teardown_screenshot()z         if self.has_exception():z9            # <<< Run custom code if the test failed. >>>z            passz        else:z9            # <<< Run custom code if the test passed. >>>z7        # (Wrap unreliable code in a try/except block.)z9        # <<< Run custom code BEFORE the super() line >>>z        super().tearDown()z    def login(self):z2        # <<< Placeholder. Add your code here. >>>z        passz    def example_method(self):zbase_test_case.pyzclass Page(object):z    html = "html"zpage_objects.pyz(from .base_test_case import BaseTestCasezfrom .page_objects import Pagez class MyTestClass(BaseTestCase):z    def test_boilerplate(self):z        self.login()z        self.example_method()z&        self.assert_element(Page.html)zboilerplate_test.pyzclass DataPage:z!    def go_to_data_url(self, sb):z8        sb.open("data:text/html,<p>Hello!</p><input />")z'    def add_input_text(self, sb, text):z        sb.type("input", text)zclass ObjTests(BaseCase):z!    def test_data_url_page(self):z'        DataPage().go_to_data_url(self)z'        self.assert_text("Hello!", "p")z3        DataPage().add_input_text(self, "Goodbye!")zclassic_obj_test.pyzclass ObjTests:z%    def test_data_url_page(self, sb):z%        DataPage().go_to_data_url(sb)z%        sb.assert_text("Hello!", "p")z1        DataPage().add_input_text(sb, "Goodbye!")zsb_fixture_test.pyZsamplesz1from .google_objects import HomePage, ResultsPagez)BaseCase.main(__name__, __file__, "--uc")zclass GoogleTests(BaseCase):z"    def test_google_dot_com(self):z        if self.headless:z8            self.skip("Skipping test in headless mode.")z!        if not self.undetectable:z2            self.get_new_driver(undetectable=True)z+        self.open("https://google.com/ncr")z<        sb.click_if_visible('button:contains("Accept all")')z,        self.assert_title_contains("Google")z4        self.type(HomePage.search_box, "github.com")z3        self.assert_element(HomePage.search_button)z:        self.assert_element(HomePage.feeling_lucky_button)z*        self.click(HomePage.search_button)zB        self.assert_text("github.com", ResultsPage.search_results)zgoogle_test.pyzclass HomePage(object):z&    dialog_box = '[role="dialog"] div'z#    search_box = '[title="Search"]'z2    search_button = 'input[value="Google Search"]'zA    feeling_lucky_button = """input[value="I'm Feeling Lucky"]"""zclass ResultsPage(object):z%    search_results = "div#center_col"zgoogle_objects.pyz;""" Classic Page Object Model with BaseCase inheritance """zclass LoginPage:z/    def login_to_swag_labs(self, sb, username):z-        sb.open("https://www.saucedemo.com/")z'        sb.type("#user-name", username)z,        sb.type("#password", "secret_sauce")z(        sb.click('input[type="submit"]')zclass MyTests(BaseCase):z#    def test_swag_labs_login(self):z=        LoginPage().login_to_swag_labs(self, "standard_user")z3        self.assert_element("#inventory_container")zB        self.assert_element('div:contains("Sauce Labs Backpack")')zswag_labs_test.pyz7""" Classic Page Object Model with the "sb" fixture """zclass MyTests:z'    def test_swag_labs_login(self, sb):z;        LoginPage().login_to_swag_labs(sb, "standard_user")z/        sb.assert_element("div.inventory_list")z@        sb.assert_element('div:contains("Sauce Labs Backpack")')z,        sb.js_click("a#logout_sidebar_link")z7        sb.assert_element("div#login_button_container")zsb_swag_test.pyu     â”œâ”€â”€ my_first_test.pyu!     â”œâ”€â”€ parameterized_test.pyu     â”œâ”€â”€ setup.cfgu     â”œâ”€â”€ test_demo_site.pyu     â””â”€â”€ boilerplates/u         â”œâ”€â”€ __init__.pyu!         â”œâ”€â”€ base_test_case.pyu#         â”œâ”€â”€ boilerplate_test.pyu#         â”œâ”€â”€ classic_obj_test.pyu         â”œâ”€â”€ page_objects.pyu"         â”œâ”€â”€ sb_fixture_test.pyu         â””â”€â”€ samples/u             â”œâ”€â”€ __init__.pyu%             â”œâ”€â”€ google_objects.pyu"             â”œâ”€â”€ google_test.pyu#             â”œâ”€â”€ sb_swag_test.pyu%             â””â”€â”€ swag_labs_test.pyú"zsbase print "%s" -nzsbase print '%s' -nz3" was created with config files and sample tests! *)$r   ÚplatformÚcoloramaZForeZBLUEZBackZLIGHTCYAN_EXZREDZLIGHTYELLOW_EXZBLACKZMAGENTAÚStyleZ	RESET_ALLÚargvr   ÚlenÚstrÚ
startswithÚosÚpathÚexistsÚgetcwdÚlowerÚreplaceÚmkdirr   r   r   ÚappendÚopenÚ
writelinesÚjoinÚcloseÚsystemÚremover   )Úc1Zc5Zc7ÚcrZghaÚbasicZhelp_meÚ	error_msgZinvalid_cmdÚcommand_argsÚdir_nameÚoptionsÚoptionÚdataZseleniumbase_reqr   Ú	file_pathÚfileZ
dir_name_bZ
dir_name_cÚsuccessZ
dir_name_2Z
dir_name_3r	   r	   r
   Úmain4   s    


ÿ




































































































































































































































ÿÿÿ

ÿ


ÿÿÿÿÿÿÿÿ


ÿÿÿÿÿÿ


























ÿÿ
ÿ







ÿÿ




ÿ


ÿÿÿrG   Ú__main__)N)Ú__doc__r'   r-   r   r   rG   Ú__name__r	   r	   r	   r
   Ú<module>   s   
      )