import pytest
import asyncio
from seleniumbase import BaseCase
from PIL import Image
from io import BytesIO
from telegram import Bot
class TestLoginOut(BaseCase):
# Помечаем тест меткой "smoke" (быстрый тест, проверяющий основную функциональность)
@pytest.mark.smoke
def test_avh_kz(self):
# Получаем существующий цикл событий (event loop) для работы с асинхронными функциями
loop = asyncio.get_event_loop()
# Запускаем асинхронную функцию для выполнения теста
loop.run_until_complete(self.test_avh_kz_async())
# Асинхронная версия теста для работы с веб-сайтом
async def test_avh_kz_async(self):
try:
# Открываем веб-страницу
self.open("https://ntsk.ru/news/55732")
# Пытаемся кликнуть на элемент с классом 'articles1'
self.click('li.articles1')
except:
# В случае ошибки делаем скриншот и отправляем уведомление в Telegram
screenshot = await self.take_screenshot() # Получаем скриншот страницы
await self.send_telegram_notification(
token="тут был токен", # Токен бота Telegram
chat_id="-1002263061214", # ID чата Telegram
message="Комент", # Сообщение с уведомлением
screenshot=screenshot # Прикрепляем скриншот к уведомлению
)
# Пробрасываем исключение для фиксации в отчете о тестировании
raise
# Асинхронная функция для получения скриншота страницы
async def take_screenshot(self):
# Получаем скриншот в формате PNG
screenshot = self.driver.get_screenshot_as_png()
# Открываем изображение с помощью библиотеки Pillow
return Image.open(BytesIO(screenshot))
# Асинхронная функция для отправки уведомления в Telegram с прикрепленным скриншотом
@staticmethod
async def send_telegram_notification(token, chat_id, message, screenshot):
bot = Bot(token=token) # Инициализация бота с помощью токена
screenshot_buffer = BytesIO() # Буфер для хранения изображения
screenshot.save(screenshot_buffer, format="PNG") # Сохраняем скриншот в буфер в формате PNG
screenshot_buffer.seek(0) # Ставим указатель буфера в начало для чтения
# Отправляем фотографию с сообщением в указанный чат Telegram
await bot.send_photo(chat_id=chat_id, photo=screenshot_buffer, caption=message)