From 74f62fce5969357422887e1d7f202d80c5649f10 Mon Sep 17 00:00:00 2001 From: Tusa05 Date: Tue, 7 Oct 2025 16:45:18 +0300 Subject: [PATCH] lesson6.K --- .../test_01_form.cpython-313-pytest-8.4.2.pyc | Bin 0 -> 4174 bytes .../test_02_calc.cpython-313-pytest-8.4.2.pyc | Bin 0 -> 3680 bytes .../test_03_shop.cpython-313-pytest-8.4.2.pyc | Bin 0 -> 4990 bytes 06K_lesson/pytest.ini | 7 +++ 06K_lesson/test_01_form.py | 50 +++++++++++++++++ 06K_lesson/test_02_calc.py | 36 +++++++++++++ 06K_lesson/test_03_shop.py | 51 ++++++++++++++++++ 7 files changed, 144 insertions(+) create mode 100644 06K_lesson/__pycache__/test_01_form.cpython-313-pytest-8.4.2.pyc create mode 100644 06K_lesson/__pycache__/test_02_calc.cpython-313-pytest-8.4.2.pyc create mode 100644 06K_lesson/__pycache__/test_03_shop.cpython-313-pytest-8.4.2.pyc create mode 100644 06K_lesson/pytest.ini create mode 100644 06K_lesson/test_01_form.py create mode 100644 06K_lesson/test_02_calc.py create mode 100644 06K_lesson/test_03_shop.py diff --git a/06K_lesson/__pycache__/test_01_form.cpython-313-pytest-8.4.2.pyc b/06K_lesson/__pycache__/test_01_form.cpython-313-pytest-8.4.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8763fea067640d5f9fdd92dfd43a7844bd066c86 GIT binary patch literal 4174 zcmc&%T}&g_6~6wzwlQF{24gUopB1>fHY~diED1~Y2knM!b{o%5RSA;OU=L=3J>$-d zp&s=it@=P7+KnPbjnqmdQrZRy2@*Bxs%oOV_hlw#Wi(Axq^eR|^JGh?$@ z-9%LCm6?0~?)lC==iEEPaUkFWX#6Dnm$lm-0RD^_bJz{y_yt6~0|-Fa?gGK4&-O)! zXpe(Mr{IcXjs32B(Ia?t+Hn^ydIc|{olzk8^0tKQZ`jqngiZ5qGAlWO-CzX7*l$#_ z28KRC^mL%VM zFuD3n*wY3sXCrNyz)3CU2*()_oECzew6{cXoe{xpAvj1!O9amu5uk3S_qJYEfIoeLB|I9TbO75E1c-i>D5Ho^q&d0&~}^AbAFrkv8SDN4G~?6nl_n!lWNS3o9uZc%=Mi>8EDv<)G#2e zem7&IQCv;2#ZBAB+`Q_(4aL;hNo(siGaE!-%ARxsz_kTS~}gI*(Zw$c|9fEaki#&wdNUEt1N5k~NtH+74?A%kDBt|4NOYa>IaD*LMw z+54}R#jBfY8~>lzHe}}LYt`0Tg=!mbs>lDawlDu306)-A>R6*2Osa8`^B^&FPrkM$ zNhNW1Vq%5o*gP#{Svr+tHYP--z;JB2n6$nelCRSn^hA!9=%iFBF=A>>Di&nlDl3Rm zlB0`E86ptnUF9QXU-?A#7HCu6hULFdK30FIzM*`oe585kTuxv_v5YSZJOCP;UF|mmM?RXU}(0n2I(HD59PMk`ITge7g>qrInDmcb!=NK(OgAy z6YG_43A`L$DN7R1E#bY+jfv%zA}fu(DnpqqC9`~v(Og-yLs9Ob3ydJeOO@nQTqlz` zn#4nM{cBxw$wdFDFFJUE&K2B`55f1L^SNvfPfmVNcj5jckxG zoq)1`q>*9SH)3T~h9gE6W!DJaKN1-Gl|3Uy0^K9^gkhDwJvnkJT(O+ZqFQJ^Jtloq ziE{$}Ak>@-xjdse@{FXlt+HH>LQPR*P)hL?t2ysoe|bUkiVRY$GZj&5yGalfvGC1> zn-A`1aDLeAx@LdrmKH!BC|Z&P7A2L@d@q(NxUv*2XhAAV7YdZXlmtCQfzjHKnp!Ed z1&QTQstP=^5VZ&;uJPqUPB*3U1%8DtP`K?hFD25e4ECV4U)OVpin<^Oyr6YatGrO8 zC5ri8sX%kIUT)`i%dC{>(%khgVy#n8u%duV76gn`8+t#3+tXz96dQ~W zSHhqJMmY>NgnEuLd#+)km&Ii3ZH6|FTTke~S@z>>)LUb!nYmPF>ifIW%shvV32HA< zbK*(pLS97th@T$X%+1+l61APEKbLRun_PjXbK;7;$dkx(%X+~kFX;(Q zl`7gfU4Y@K4Z6UhdjVx#m_azWIm8dpH~bsmi(vGp18)yhgF{>HL)iY%_oh$jA`ak# zqrRb9UrOyu?FxIFJDdC8ulC(iVB`=+YH(PE!`rh5Fm)7-*P=-^n%rI4%kSj(*Q?PR zTOEh6rv`^qIJBKQfR~OU1GUHnHF9D1#@_9n+xst7BiFV9hcH}&gDM@H}alH4&cRSgtXm`{lrFUu}L*H`J2#hdp_)WG*FG*QDF2C zMr&|Xg`?XK4&XPQ

_YM6=EPo%_n%gKC5{640l@z5^J0;s&8eEjX$MN8iucry{GPS`W1zP@;HDZy; zzuX{LvTeEkc&>Nr)?w4e2R|JAY_uA?U5k-wj8wk;YBl!STfW2d^GfIZTe5O~UhSE$ zbsE3V4VfjV6OXajlBo?2DUb(CV-eNP`G2}VIQj$vZ^uLboBkgMj#0ycgkOW^r6UX? zf!0gauc=i1^r7}n3CyOzq8rR>i8PNP6JmG`G~b)`3$)*4Q`Tz~zsHKm)k;ObMfDT2 z1B9z+wJ@!_c%jJW$_3_{a2>JuUuhA4H9v9KY_>lE@FVaT415VL96K-Cy7guM0TYI0 AIRF3v literal 0 HcmV?d00001 diff --git a/06K_lesson/__pycache__/test_02_calc.cpython-313-pytest-8.4.2.pyc b/06K_lesson/__pycache__/test_02_calc.cpython-313-pytest-8.4.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0ec1a667d8473158c2f2d202b7dde6dee72cf384 GIT binary patch literal 3680 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 literal 0 HcmV?d00001 diff --git a/06K_lesson/pytest.ini b/06K_lesson/pytest.ini new file mode 100644 index 0000000..5428821 --- /dev/null +++ b/06K_lesson/pytest.ini @@ -0,0 +1,7 @@ +[pytest] + +python = test_*.py +markers = + test_calculator: проверка калькулятора + test_form: проверка формы + test_shop \ No newline at end of file diff --git a/06K_lesson/test_01_form.py b/06K_lesson/test_01_form.py new file mode 100644 index 0000000..a141f72 --- /dev/null +++ b/06K_lesson/test_01_form.py @@ -0,0 +1,50 @@ +from selenium import webdriver +from selenium.webdriver.common.by import By + +def test_form_validation(): + driver = webdriver.Edge() + driver.get("https://bonigarcia.dev/selenium-webdriver-java/data-types.html") + + first_name_field = driver.find_element(By.NAME,'first-name') + first_name_field.send_keys("Иван") + + last_name_field = driver.find_element(By.NAME,'last-name') + last_name_field.send_keys("Петров") + + address_field = driver.find_element(By.NAME,'address') + address_field.send_keys("Ленина, 55-3") + + email_field = driver.find_element(By.NAME,'e-mail') + email_field.send_keys("test@skypro.com") + + phone_field = driver.find_element(By.NAME,'phone') + phone_field.send_keys("+7985899998787") + + city_field = driver.find_element(By.NAME,'city') + city_field.send_keys("Москва") + + country_field = driver.find_element(By.NAME,'country') + country_field.send_keys("Россия") + + job_position_field = driver.find_element(By.NAME,'job-position') + job_position_field.send_keys("QA") + + company_field = driver.find_element(By.NAME,'company') + company_field.send_keys("SkyPro") + + submit_button = driver.find_element(By.CSS_SELECTOR, "button[type='submit']") + submit_button.click() + + + pole_z = driver.find_element(By.ID, "zip-code").get_attribute("class") + assert pole_z == "alert py-2 alert-danger" + + + poles = ["#first-name", "#last-name", "#address", "#city", "#country", "#e-mail", "#phone", "#company"] + for pole in poles: + pole_class = driver.find_element(By.CSS_SELECTOR, pole).get_attribute("class") + assert pole_class == "alert py-2 alert-success" + + driver.quit() + + diff --git a/06K_lesson/test_02_calc.py b/06K_lesson/test_02_calc.py new file mode 100644 index 0000000..b9c2f92 --- /dev/null +++ b/06K_lesson/test_02_calc.py @@ -0,0 +1,36 @@ +import pytest +from selenium import webdriver +from selenium.webdriver.chrome.service import Service as ChromeService +from webdriver_manager.chrome import ChromeDriverManager +from selenium.webdriver.common.by import By +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.support import expected_conditions as EC + +@pytest.mark.test_calculator +def test_sum(): + driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install())) + waiter = WebDriverWait(driver, 47) + + driver.get("https://bonigarcia.dev/selenium-webdriver-java/slow-calculator.html") + delay = driver.find_element(By.CSS_SELECTOR, "#delay") + delay.clear() + delay.send_keys("45") + driver.find_element(By.XPATH, "//span[contains(text(),'7')]").click() + driver.find_element(By.XPATH, "//span[contains(text(),'+')]").click() + driver.find_element(By.XPATH, "//span[contains(text(),'8')]").click() + driver.find_element(By.XPATH, "//span[contains(text(),'=')]").click() + + waiter.until( + EC.text_to_be_present_in_element((By.CSS_SELECTOR, "div[class='screen']"), "15") +) + + + @pytest.mark.test_calculator + @pytest.mark.parametrize('res_in, res_es', [ + (driver.find_element(By.CSS_SELECTOR, "div[class='screen']").get_attribute("innerText"), '15') + ]) + def test_sum(res_in, res_es): + assert res_es == res_in + + + driver.quit() diff --git a/06K_lesson/test_03_shop.py b/06K_lesson/test_03_shop.py new file mode 100644 index 0000000..0ead2f2 --- /dev/null +++ b/06K_lesson/test_03_shop.py @@ -0,0 +1,51 @@ +import pytest +from selenium import webdriver +from selenium.webdriver.common.by import By +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.support import expected_conditions as EC + +@pytest.mark.test_shop +def test_shop(): + driver = webdriver.Firefox() + waiter = WebDriverWait(driver, 5) + + driver.get("https://www.saucedemo.com/") + login = driver.find_element(By.CSS_SELECTOR, "#user-name").send_keys("standard_user") + password = driver.find_element(By.CSS_SELECTOR, "#password").send_keys("secret_sauce") + driver.find_element(By.CSS_SELECTOR, "#login-button").click() + waiter.until( + EC.text_to_be_present_in_element((By.CSS_SELECTOR, 'div[class="app_logo"]'), "Swag Labs") + ) + + driver.find_element(By.CSS_SELECTOR, "#add-to-cart-sauce-labs-backpack").click() + driver.find_element(By.CSS_SELECTOR, "#add-to-cart-sauce-labs-bolt-t-shirt").click() + driver.find_element(By.CSS_SELECTOR, "#add-to-cart-sauce-labs-onesie").click() + + driver.find_element(By.CSS_SELECTOR, "#shopping_cart_container").click() + driver.find_element(By.CSS_SELECTOR, "#checkout").click() + waiter.until( + EC.text_to_be_present_in_element((By.CSS_SELECTOR, 'div[class="app_logo"]'), "Swag Labs") + ) + first_n = driver.find_element(By.CSS_SELECTOR, "#first-name").send_keys("Natalia") + last_n = driver.find_element(By.CSS_SELECTOR, "#last-name").send_keys("Sazonava") + zipcode = driver.find_element(By.CSS_SELECTOR, "#postal-code").send_keys("210039") + driver.find_element(By.CSS_SELECTOR, "#continue").click() + waiter.until( + EC.text_to_be_present_in_element((By.XPATH, '//*[@id="header_container"]/div[2]/span'), "Checkout: Overview") + ) + + + @pytest.mark.test_shop + @pytest.mark.parametrize('res_in, res_es', [ + (driver.find_element(By.XPATH, '//*[@id="checkout_summary_container"]/div/div[2]/div[8]').get_attribute("textContent"), 'Total: $58.29') + ]) + def test_price(res_in, res_es): + assert res_in == res_es + if res_in == res_es: + print("success") + else: + print("false") + + test_price(print()) + + driver.quit()