Загрузить файлы в «/»

This commit is contained in:
Yesen 2023-11-16 23:49:16 +03:00
parent d74c4f9bb4
commit 32f9cdd4dc
5 changed files with 169 additions and 0 deletions

52
README.md Normal file
View File

@ -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)
Что не вышло:
- Транслитить и сравнивать мой регион и тот что на сайте, т.к. на сайте используются сокращения регионов
- Определить мой регион сразу на русском языке, не используя виртуальное окружение

1
data.txt Normal file

File diff suppressed because one or more lines are too long

25
get_region_by_ip.py Normal file
View File

@ -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("Не удалось определить регион.")

19
region_on_site.py Normal file
View File

@ -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)

72
sc2.py Normal file
View File

@ -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}