From 32f9cdd4dca6e9a886b258a20b8baa7615d387e3 Mon Sep 17 00:00:00 2001 From: Yesen Date: Thu, 16 Nov 2023 23:49:16 +0300 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20=D0=B2=20=C2=AB?= =?UTF-8?q?/=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 52 ++++++++++++++++++++++++++++++++ data.txt | 1 + get_region_by_ip.py | 25 ++++++++++++++++ region_on_site.py | 19 ++++++++++++ sc2.py | 72 +++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 169 insertions(+) create mode 100644 README.md create mode 100644 data.txt create mode 100644 get_region_by_ip.py create mode 100644 region_on_site.py create mode 100644 sc2.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..73cb12a --- /dev/null +++ b/README.md @@ -0,0 +1,52 @@ +# Автотест по сценариям для стажировки в компании Тензор + +Здесь представлен код для автотеста по сценариям из ТЗ. Весь код был написан на Python с использованием **__Selenium__**. В качестве браузера для тестирования был выбран **__Firefox__**, ввиду отсутствия пунктов ТЗ о том, в каких браузерах средует выполнить автотест. +> Докскрины для функций было решено не делать, т.к. не знаю как будет проверяться работа, поэтому запишу описание работы сюда + +Далее можно подробнее изучить код: +## Сценарий 1: +[Перейти к sc1.py](sc1.py)\ +Были импортированы следующие библиотеки и модули: +- selenium, +- selenium.webdriver: + - By, + - expected_conditions, + - WebDriverWait, + - Service, +- pytest + +1) С помощью функции `browser()` создаем фикстуру для браузера +2) Основной код лежит в функции `test()` +3) Для скипа всплывающего окна о куки следующие функции `close_popup_window(driver)` и `close_popup_window2(driver)` +4) В файле есть закомментированный цикл `for image in png_elements...`, который используется для определения конкретных размеров указанных изображений (по высоте и ширине) + + +## Сценарий 2: +[Перейти к sc2.py](sc2.py) \ +Были импортированы следующие библиотеки и модули: +- selenium, +- selenium.webdriver: + - By, + - expected_conditions, + - WebDriverWait, + - Service, +- http.client +- requests +- pytest + +1) С помощью функции `browser()` создаем фикстуру для браузера +2) Основной код лежит в функции `test_two()` +3) Для скипа всплывающего окна о куки следующая функция `close_pop_up_m(driver)` +4) Функция `region_by_ip()` определяет Ip пользователя, который запускает код и выводит регион этого пользователя. ВВиду того, что в задании не указано точно, как конкретно нужно проверять регион (только его наличие, правильность определения и прочее) было решено оставить конструкцию: +```python + print ("Сравни регионы: - {}, согласно сайту: {}".format(reg, txt_cnt)) +``` +чтобы через запуск +```bash +pytest -s sc2.py +``` +можно было сравнить регионы. +Также начала разрабатывать возможные варианты для сранения текущего региона с тем, что есть на странице, но посмотрев вкладку "Сети" в панели разработчика (Devtools) выяснилось, что определяются не все регионы, а только конкретные в России, а по умолчанию стоит регион "Москва". Эти данные занесены в отдел [region/data.txt](region/data.txt) +Что не вышло: +- Транслитить и сравнивать мой регион и тот что на сайте, т.к. на сайте используются сокращения регионов +- Определить мой регион сразу на русском языке, не используя виртуальное окружение diff --git a/data.txt b/data.txt new file mode 100644 index 0000000..5260b92 --- /dev/null +++ b/data.txt @@ -0,0 +1 @@ +define("SitesCommonExt/Region/resources/regionList",["i18n!SitesCommonExt"],(function(i){return[{name:i("г. Москва","staticRegionList"),shortName:i("Москва","staticRegionList"),city:i("Москва","staticRegionList"),region:"77",key:"77"},{name:i("г. Санкт-Петербург","staticRegionList"),shortName:i("Санкт-Петербург","staticRegionList"),city:i("Санкт-Петербург","staticRegionList"),region:"78",key:"78"},{name:i("Республика Адыгея","staticRegionList"),shortName:i("Республика Адыгея","staticRegionList"),city:"",region:"01",key:"01"},{name:i("Республика Башкортостан","staticRegionList"),shortName:i("Республика Башкортостан","staticRegionList"),city:i("Уфа","staticRegionList"),region:"02",key:"02"},{name:i("Республика Бурятия","staticRegionList"),shortName:i("Республика Бурятия","staticRegionList"),city:i("Улан-Удэ","staticRegionList"),region:"03",key:"03"},{name:i("Республика Алтай","staticRegionList"),shortName:i("Республика Алтай","staticRegionList"),city:i("Горно-Алтайск","staticRegionList"),region:"04",key:"04"},{name:i("Республика Дагестан","staticRegionList"),shortName:i("Республика Дагестан","staticRegionList"),city:i("Махачкала","staticRegionList"),region:"05",key:"05"},{name:i("Республика Ингушетия","staticRegionList"),shortName:i("Республика Ингушетия","staticRegionList"),city:i("Назрань","staticRegionList"),region:"06",key:"06"},{name:i("Кабардино-Балкарская Республика","staticRegionList"),shortName:i("Респ. Кабардино-Балкария","staticRegionList"),city:i("Нальчик","staticRegionList"),region:"07",key:"07"},{name:i("Республика Калмыкия","staticRegionList"),shortName:i("Республика Калмыкия","staticRegionList"),city:i("Элиста","staticRegionList"),region:"08",key:"08"},{name:i("Карачаево-Черкесская Республика","staticRegionList"),shortName:i("Респ. Карачаево-Черкессия","staticRegionList"),city:i("Черкесск","staticRegionList"),region:"09",key:"09"},{name:i("Республика Карелия","staticRegionList"),shortName:i("Республика Карелия","staticRegionList"),city:i("Петрозаводск","staticRegionList"),region:"10",key:"10"},{name:i("Республика Коми","staticRegionList"),shortName:i("Республика Коми","staticRegionList"),city:i("Сыктывкар","staticRegionList"),region:"11",key:"11"},{name:i("Республика Марий Эл","staticRegionList"),shortName:i("Республика Марий Эл","staticRegionList"),city:"",region:"12",key:"12"},{name:i("Республика Мордовия","staticRegionList"),shortName:i("Республика Мордовия","staticRegionList"),city:i("Саранск","staticRegionList"),region:"13",key:"13"},{name:i("Республика Саха (Якутия)","staticRegionList"),shortName:i("Республика Саха (Якутия)","staticRegionList"),city:i("Якутск","staticRegionList"),region:"14",key:"14"},{name:i("Республика Северная Осетия - Алания","staticRegionList"),shortName:i("Северная Осетия - Алания","staticRegionList"),city:i("Владикавказ","staticRegionList"),region:"15",key:"15"},{name:i("Республика Татарстан","staticRegionList"),shortName:i("Республика Татарстан","staticRegionList"),city:i("Казань","staticRegionList"),region:"16",key:"16"},{name:i("Республика Тыва","staticRegionList"),shortName:i("Республика Тыва","staticRegionList"),city:"",region:"17",key:"17"},{name:i("Удмуртская Республика","staticRegionList"),shortName:i("Удмуртская Республика","staticRegionList"),city:"",region:"18",key:"18"},{name:i("Республика Хакасия","staticRegionList"),shortName:i("Республика Хакасия","staticRegionList"),city:i("Абакан","staticRegionList"),region:"19",key:"19"},{name:i("Чеченская Республика","staticRegionList"),shortName:i("Республика Чечня","staticRegionList"),city:i("Грозный","staticRegionList"),region:"20",key:"20"},{name:i("Чувашская Республика","staticRegionList"),shortName:i("Республика Чувашия","staticRegionList"),city:i("Чебоксары","staticRegionList"),region:"21",key:"21"},{name:i("Алтайский край","staticRegionList"),shortName:i("Алтайский край","staticRegionList"),city:i("Барнаул","staticRegionList"),region:"22",key:"22"},{name:i("Краснодарский край","staticRegionList"),shortName:i("Краснодарский край","staticRegionList"),city:i("Краснодар","staticRegionList"),region:"23",key:"23"},{name:i("Красноярский край","staticRegionList"),shortName:i("Красноярский край","staticRegionList"),city:i("Красноярск","staticRegionList"),region:"24",key:"24"},{name:i("Приморский край","staticRegionList"),shortName:i("Приморский край","staticRegionList"),city:i("Владивосток","staticRegionList"),region:"25",key:"25"},{name:i("Ставропольский край","staticRegionList"),shortName:i("Ставропольский край","staticRegionList"),city:i("Ставрополь","staticRegionList"),region:"26",key:"26"},{name:i("Хабаровский край","staticRegionList"),shortName:i("Хабаровский край","staticRegionList"),city:i("Хабаровск","staticRegionList"),region:"27",key:"27"},{name:i("Амурская обл.","staticRegionList"),shortName:i("Амурская обл.","staticRegionList"),city:"",region:"28",key:"28"},{name:i("Архангельская обл.","staticRegionList"),shortName:i("Архангельская обл.","staticRegionList"),city:i("Архангельск","staticRegionList"),region:"29",key:"29"},{name:i("Астраханская обл.","staticRegionList"),shortName:i("Астраханская обл.","staticRegionList"),city:i("Астрахань","staticRegionList"),region:"30",key:"30"},{name:i("Белгородская обл.","staticRegionList"),shortName:i("Белгородская обл.","staticRegionList"),city:i("Белгород","staticRegionList"),region:"31",key:"31"},{name:i("Брянская обл.","staticRegionList"),shortName:i("Брянская обл.","staticRegionList"),city:i("Брянск","staticRegionList"),region:"32",key:"32"},{name:i("Владимирская обл.","staticRegionList"),shortName:i("Владимирская обл.","staticRegionList"),city:i("Владимир","staticRegionList"),region:"33",key:"33"},{name:i("Волгоградская обл.","staticRegionList"),shortName:i("Волгоградская обл.","staticRegionList"),city:i("Волгоград","staticRegionList"),region:"34",key:"34"},{name:i("Вологодская обл.","staticRegionList"),shortName:i("Вологодская обл.","staticRegionList"),city:i("Вологда","staticRegionList"),region:"35",key:"35"},{name:i("Воронежская обл.","staticRegionList"),shortName:i("Воронежская обл.","staticRegionList"),city:i("Воронеж","staticRegionList"),region:"36",key:"36"},{name:i("Ивановская обл.","staticRegionList"),shortName:i("Ивановская обл.","staticRegionList"),city:i("Иваново","staticRegionList"),region:"37",key:"37"},{name:i("Иркутская обл.","staticRegionList"),shortName:i("Иркутская обл.","staticRegionList"),city:"",region:"38",key:"38"},{name:i("Калининградская обл.","staticRegionList"),shortName:i("Калининградская обл.","staticRegionList"),city:i("Калининград","staticRegionList"),region:"39",key:"39"},{name:i("Калужская обл.","staticRegionList"),shortName:i("Калужская обл.","staticRegionList"),city:i("Калуга","staticRegionList"),region:"40",key:"40"},{name:i("Камчатский край","staticRegionList"),shortName:i("Камчатский край","staticRegionList"),city:i("Петропавловск-Камчатский","staticRegionList"),region:"41",key:"41"},{name:i("Кемеровская обл.","staticRegionList"),shortName:i("Кемеровская обл.","staticRegionList"),city:i("Кемерово","staticRegionList"),region:"42",key:"42"},{name:i("Кировская обл.","staticRegionList"),shortName:i("Кировская обл.","staticRegionList"),city:"",region:"43",key:"43"},{name:i("Костромская обл.","staticRegionList"),shortName:i("Костромская обл.","staticRegionList"),city:i("Кострома","staticRegionList"),region:"44",key:"44"},{name:i("Курганская обл.","staticRegionList"),shortName:i("Курганская обл.","staticRegionList"),city:i("Курган","staticRegionList"),region:"45",key:"45"},{name:i("Курская обл.","staticRegionList"),shortName:i("Курская обл.","staticRegionList"),city:i("Курск","staticRegionList"),region:"46",key:"46"},{name:i("Ленинградская обл.","staticRegionList"),shortName:i("Ленинградская обл.","staticRegionList"),city:i("Санкт-Петербург","staticRegionList"),region:"47",key:"47"},{name:i("Липецкая обл.","staticRegionList"),shortName:i("Липецкая обл.","staticRegionList"),city:i("Липецк","staticRegionList"),region:"48",key:"48"},{name:i("Магаданская обл.","staticRegionList"),shortName:i("Магаданская обл.","staticRegionList"),city:i("Магадан","staticRegionList"),region:"49",key:"49"},{name:i("Московская обл.","staticRegionList"),shortName:i("Московская обл.","staticRegionList"),city:i("Москва","staticRegionList"),region:"50",key:"50"},{name:i("Мурманская обл.","staticRegionList"),shortName:i("Мурманская обл.","staticRegionList"),city:i("Мурманск","staticRegionList"),region:"51",key:"51"},{name:i("Нижегородская обл.","staticRegionList"),shortName:i("Нижегородская обл.","staticRegionList"),city:i("Нижний Новгород","staticRegionList"),region:"52",key:"52"},{name:i("Новгородская обл.","staticRegionList"),shortName:i("Новгородская обл.","staticRegionList"),city:i("Великий Новгород","staticRegionList"),region:"53",key:"53"},{name:i("Новосибирская обл.","staticRegionList"),shortName:i("Новосибирская обл.","staticRegionList"),city:i("Новосибирск","staticRegionList"),region:"54",key:"54"},{name:i("Омская обл.","staticRegionList"),shortName:i("Омская обл.","staticRegionList"),city:i("Омск","staticRegionList"),region:"55",key:"55"},{name:i("Оренбургская обл.","staticRegionList"),shortName:i("Оренбургская обл.","staticRegionList"),city:i("Оренбург","staticRegionList"),region:"56",key:"56"},{name:i("Орловская обл.","staticRegionList"),shortName:i("Орловская обл.","staticRegionList"),city:i("Орел","staticRegionList"),region:"57",key:"57"},{name:i("Пензенская обл.","staticRegionList"),shortName:i("Пензенская обл.","staticRegionList"),city:i("Пенза","staticRegionList"),region:"58",key:"58"},{name:i("Пермский край","staticRegionList"),shortName:i("Пермский край","staticRegionList"),city:i("Пермь","staticRegionList"),region:"59",key:"59"},{name:i("Псковская обл.","staticRegionList"),shortName:i("Псковская обл.","staticRegionList"),city:i("Псков","staticRegionList"),region:"60",key:"60"},{name:i("Ростовская обл.","staticRegionList"),shortName:i("Ростовская обл.","staticRegionList"),city:i("Ростов-на-Дону","staticRegionList"),region:"61",key:"61"},{name:i("Рязанская обл.","staticRegionList"),shortName:i("Рязанская обл.","staticRegionList"),city:i("Рязань","staticRegionList"),region:"62",key:"62"},{name:i("Самарская обл.","staticRegionList"),shortName:i("Самарская обл.","staticRegionList"),city:i("Самара","staticRegionList"),region:"63",key:"63"},{name:i("г. Тольятти","staticRegionList"),shortName:i("Тольятти","staticRegionList"),city:i("Тольятти","staticRegionList"),region:"63",key:"63t"},{name:i("Саратовская обл.","staticRegionList"),shortName:i("Саратовская обл.","staticRegionList"),city:i("Саратов","staticRegionList"),region:"64",key:"64"},{name:i("Сахалинская обл.","staticRegionList"),shortName:i("Сахалинская обл.","staticRegionList"),city:i("Южно-Сахалинск","staticRegionList"),region:"65",key:"65"},{name:i("Свердловская обл.","staticRegionList"),shortName:i("Свердловская обл.","staticRegionList"),city:i("Екатеринбург","staticRegionList"),region:"66",key:"66"},{name:i("Смоленская обл.","staticRegionList"),shortName:i("Смоленская обл.","staticRegionList"),city:i("Смоленск","staticRegionList"),region:"67",key:"67"},{name:i("Тамбовская обл.","staticRegionList"),shortName:i("Тамбовская обл.","staticRegionList"),city:i("Тамбов","staticRegionList"),region:"68",key:"68"},{name:i("Тверская обл.","staticRegionList"),shortName:i("Тверская обл.","staticRegionList"),city:i("Тверь","staticRegionList"),region:"69",key:"69"},{name:i("Томская обл.","staticRegionList"),shortName:i("Томская обл.","staticRegionList"),city:i("Томск","staticRegionList"),region:"70",key:"70"},{name:i("Тульская обл.","staticRegionList"),shortName:i("Тульская обл.","staticRegionList"),city:i("Тула","staticRegionList"),region:"71",key:"71"},{name:i("Тюменская обл.","staticRegionList"),shortName:i("Тюменская обл.","staticRegionList"),city:i("Тюмень","staticRegionList"),region:"72",key:"72"},{name:i("Ульяновская обл.","staticRegionList"),shortName:i("Ульяновская обл.","staticRegionList"),city:i("Ульяновск","staticRegionList"),region:"73",key:"73"},{name:i("Челябинская обл.","staticRegionList"),shortName:i("Челябинская обл.","staticRegionList"),city:i("Челябинск","staticRegionList"),region:"74",key:"74"},{name:i("Забайкальский край","staticRegionList"),shortName:i("Забайкальский край","staticRegionList"),city:i("Чита","staticRegionList"),region:"75",key:"75"},{name:i("Ярославская обл.","staticRegionList"),shortName:i("Ярославская обл.","staticRegionList"),city:i("Ярославль","staticRegionList"),region:"76",key:"76"},{name:i("Еврейская автономная обл.","staticRegionList"),shortName:i("Еврейская АО","staticRegionList"),city:i("Биробиджан","staticRegionList"),region:"79",key:"79"},{name:i("Ненецкий автономный округ","staticRegionList"),shortName:i("Ненецкий АО","staticRegionList"),city:"",region:"83",key:"83"},{name:i("Ханты-Мансийский АО-Югра","staticRegionList"),shortName:i("Ханты-Мансийский АО","staticRegionList"),city:"",region:"86",key:"86"},{name:i("Чукотский автономный округ","staticRegionList"),shortName:i("Чукотский АО","staticRegionList"),city:"",region:"87",key:"87"},{name:i("Ямало-Ненецкий автономный округ","staticRegionList"),shortName:i("Ямало-Ненецкий АО","staticRegionList"),city:"",region:"89",key:"89"},{name:i("Запорожская обл.","staticRegionList"),shortName:i("Запорожская обл.","staticRegionList"),city:i("Запорожье","staticRegionList"),region:"90",key:"90"},{name:i("Республика Крым","staticRegionList"),shortName:i("Республика Крым","staticRegionList"),city:"",region:"91",key:"91"},{name:i("г. Севастополь","staticRegionList"),shortName:i("Севастополь","staticRegionList"),city:i("Севастополь","staticRegionList"),region:"92",key:"92"},{name:i("Донецкая народная республика","staticRegionList"),shortName:i("Донецкая нар. респ.","staticRegionList"),city:i("Донецк","staticRegionList"),region:"93",key:"93"},{name:i("Луганская народная республика","staticRegionList"),shortName:i("Луганская нар. респ.","staticRegionList"),city:i("Луганск","staticRegionList"),region:"94",key:"94"},{name:i("Херсонская обл.","staticRegionList"),shortName:i("Херсонская обл.","staticRegionList"),city:i("Херсон","staticRegionList"),region:"95",key:"95"}]})); \ No newline at end of file diff --git a/get_region_by_ip.py b/get_region_by_ip.py new file mode 100644 index 0000000..8787265 --- /dev/null +++ b/get_region_by_ip.py @@ -0,0 +1,25 @@ +import http.client + +conn = http.client.HTTPConnection("ifconfig.me") +conn.request("GET", "/ip") +ip = conn.getresponse().read() +fixed = ip.decode("utf-8").strip() +# print (fixed) + +import requests + +def get_user_region(ip): + try: + response = requests.get(f"https://ipinfo.io/{ip}/json?lang=ru") + data = response.json() + return data.get("region") + except Exception as e: + print(f"Произошла ошибка: {str(e)}") + return None + +user_region = get_user_region(fixed) + +if user_region: + print(f"Ваш регион: {user_region}") +else: + print("Не удалось определить регион.") \ No newline at end of file diff --git a/region_on_site.py b/region_on_site.py new file mode 100644 index 0000000..93b7259 --- /dev/null +++ b/region_on_site.py @@ -0,0 +1,19 @@ +import re + +file_path = 'data.txt' + +with open(file_path, 'r', encoding='utf-8') as file: + data = file.read() + + pattern = re.compile(r'city:i\("(.*?)"') + pattern_2 = re.compile(r'shortName:i\("(.*?)"') + + cities = pattern.findall(data) + regions = pattern_2.findall(data) + + cities = [city for city in cities if city] + regions = [region for region in regions if region] + + print(cities) + print (regions) + diff --git a/sc2.py b/sc2.py new file mode 100644 index 0000000..d71a908 --- /dev/null +++ b/sc2.py @@ -0,0 +1,72 @@ + +import pytest +from selenium import webdriver +from selenium.webdriver.common.by import By +from selenium.webdriver.support import expected_conditions as EC +from selenium.webdriver.support.wait import WebDriverWait +from selenium.webdriver.firefox.service import Service +import http.client +import requests + +@pytest.fixture +def browser(): + driver = webdriver.Firefox(service=Service(r'/home/karasik/git/test/geckodriver')) + yield driver + driver.quit() + +def test_two(browser): + browser.get('https://sbis.ru') + browser.find_element(By.LINK_TEXT, "Контакты").click() + + close_pop_up_m(browser) + + el = browser.find_element(By.CLASS_NAME, "sbis_ru-Region-Chooser") + assert el, ("Регион не отображается") + txt_cnt = el.text + reg = region_by_ip() + print ("Сравни регионы: - {}, согласно сайту: {}".format(reg, txt_cnt)) + + assert browser.find_element(By.CSS_SELECTOR, "div.controls-Tree__item:nth-child(2)"),("Партнеры не отображаются") + + try: + browser.find_element(By.CLASS_NAME, "sbis_ru-Region-Chooser").click() + botton_clicked= browser.find_element(By.CSS_SELECTOR, 'span[title="Камчатский край"]').click() + + except: + assert ("Не прожимается кнопка") + + assert browser.find_element(By.CLASS_NAME, "sbis_ru-Region-Chooser"), ("Регион не отображается") + assert browser. find_element(By.CSS_SELECTOR, "div.controls-Tree__item:nth-child(2)"), ("Партнеры не отображаются") + +def close_pop_up_m(driver): + banner_element = WebDriverWait(driver,10).until( + EC.visibility_of_element_located((By.CLASS_NAME, "sbis_ru-CookieAgreement__close")) + ) + banner_element.click() + +def region_by_ip(): + conn = http.client.HTTPConnection("ifconfig.me") + conn.request("GET", "/ip") + ip = conn.getresponse().read() + fixed = ip.decode("utf-8").strip() + + def get_user_region(ip): + try: + response = requests.get(f"https://ipinfo.io/{ip}/json?lang=ru") + data = response.json() + return data.get("region") + except Exception as e: + print(f"Произошла ошибка: {str(e)}") + return None + + user_region = get_user_region(fixed) + return {"user_region": user_region} + + + + + + + + +