Загрузить файлы в «/»
This commit is contained in:
parent
d74c4f9bb4
commit
32f9cdd4dc
52
README.md
Normal file
52
README.md
Normal 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)
|
||||
Что не вышло:
|
||||
- Транслитить и сравнивать мой регион и тот что на сайте, т.к. на сайте используются сокращения регионов
|
||||
- Определить мой регион сразу на русском языке, не используя виртуальное окружение
|
25
get_region_by_ip.py
Normal file
25
get_region_by_ip.py
Normal 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
19
region_on_site.py
Normal 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
72
sc2.py
Normal 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}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user