Загрузить файлы в «/»
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