Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 26.10.2022
Сообщений: 35

Как передать декоратор в тест Selenium

06.02.2023, 20:02. Показов 1593. Ответов 11

Студворк — интернет-сервис помощи студентам
Всем привет, помогите разобраться есть тесты перед выполнением которых прекондишн что пользователь должен быть авторизирован, было решено делать это с помощью фикстуры которая находиться в файле conftest.py
Python
1
2
3
4
5
6
7
8
9
@pytest.fixture(scope="function")
 
def auth():
    def authorization_(self):
        self.element_is_visible(self.locators.LOGIN_).send_keys(USER_EMAIL_AUTHORIZATION)
        self.element_is_visible(self.locators.PASSWORD_).send_keys(EMAIL_PASSWORD)
        self.element_is_visible(self.locators.LOG_IN_BUTTON_).click()
 
    return authorization_
Когда передаю фикстуру в тест
Python
1
2
3
4
5
6
7
class TestTracker:
    def test_example(self, driver, auth):
        tracker = HomePage(driver, LOGIN_URL)
        tracker.open_site()
        auth(self)
        # tracker.tracker()
        time.sleep(10)
получаю такую ошибку
Code
1
2
3
4
5
self = <tests.add_tracker_test.TestTracker object at 0x00000174BEBAF1F0>
 
    def authorization_(self):
>       self.element_is_visible(self.locators.LOGIN_).send_keys(USER_EMAIL_AUTHORIZATION)
E       AttributeError: 'TestTracker' object has no attribute 'element_is_visible'
Помогите разобраться.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.02.2023, 20:02
Ответы с готовыми решениями:

[Selenium] Как написать тест для поля Date?
Как написать Тест для поля Date (найти Xpath поля Date и аутпут) ...

Тут по теме выше про "Тест" написал функцию и вот хочу понять как МОДЕРНИЗИРОВАТЬ её, обернуть в @декоратор?
Вот он # coding: utf8 __author__ = 'yesok' def m(): print(&quot;End!&quot;) def main():

Написать простой декоратор, используя декоратор wraps, для передачи данных от оригинальной функции
На python Написать простой декоратор, используя декоратор wraps, для передачи данных от оригинальной функции. Реализовать простую функцию...

11
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
06.02.2023, 20:14
torwald, а зачем передавать туда ссылку на класс теста вместо ссылки на тракер? ну и методы странные конечно
0
0 / 0 / 0
Регистрация: 26.10.2022
Сообщений: 35
06.02.2023, 20:32  [ТС]
Мне нужно передавать в тест декоратор а не ссылку на тракер потому что я не хочу в функцию тракер дублировать код функции авторизации и в дальнейшем будут еще тесты которые подразумевают что пользователь должен быть авторизирован и тогда нужно будет и в них дублировать код авторизации. Извините если я не правильно вас понял, я только изучаю selenium и python
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
06.02.2023, 20:48
torwald, еще раз спрашиваю зачем ты сунул внутрь auth self - то есть ссылку на класс Теста. Почему ты не сунул туда тракер, который как раз похоже умеет все описанное делать?
вот эти методы из какого класса?
Цитата Сообщение от torwald Посмотреть сообщение
self.element_is_visible
0
0 / 0 / 0
Регистрация: 26.10.2022
Сообщений: 35
06.02.2023, 21:05  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
torwald, еще раз спрашиваю зачем ты сунул внутрь auth self - то есть ссылку на класс Теста. Почему ты не сунул туда тракер, который как раз похоже умеет все описанное делать?
вот эти методы из какого класса?
В тракер у меня прописана другая логика которая должна выполняться после авторизации, а это одна из функций класса конструктора BasePage self.element_is_visible который передается в другие классы в том числе и класс с тракером
Python
1
2
3
4
5
class HomePage(BasePage):
    locators = AddTrackerLocators()
 
    def tracker(self):
        self.element_is_visible(self.locators.CLOSE_EDIT_PROFILE).click()
Добавлено через 10 минут
Цитата Сообщение от Welemir1 Посмотреть сообщение
torwald, еще раз спрашиваю зачем ты сунул внутрь auth self - то есть ссылку на класс Теста. Почему ты не сунул туда тракер, который как раз похоже умеет все описанное делать?
вот эти методы из какого класса?
Так тоже не выходит
Python
1
2
3
4
5
6
7
class TestTracker:
    def test_example(self, driver, auth):
        tracker = HomePage(driver, LOGIN_URL)
        tracker.open_site()
        auth.tracker()
        # tracker.tracker()
        time.sleep(10)
Code
1
2
3
4
5
6
7
8
9
10
add_tracker_test.py:8 (TestTracker.test_example)
self = <tests.add_tracker_test.TestTracker object at 0x000001F52529F1C0>
driver = <selenium.webdriver.chrome.webdriver.WebDriver (session="f2d0af121783f4c88c315bf9c8b00ad4")>
auth = <function auth.<locals>.authorization_ at 0x000001F524BB65F0>
 
    def test_example(self, driver, auth):
        tracker = HomePage(driver, LOGIN_URL)
        tracker.open_site()
>       auth.tracker()
E       AttributeError: 'function' object has no attribute 'tracker'
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
06.02.2023, 21:09
Цитата Сообщение от torwald Посмотреть сообщение
Так тоже не выходит
потому что ты делаешь не то что тебе говорят и не отвечаешь на прямые вопросы.

Поробую в последний раз - вот это какой класс умеет делать?
Цитата Сообщение от torwald Посмотреть сообщение
self.element_is_visible(self.locators.LO GIN_).send_keys(USER_EMAIL_AUTHORIZATION )
        self.element_is_visible(self.locators.PA SSWORD_).send_keys(EMAIL_PASSWORD)
        self.element_is_visible(self.locators.LO G_IN_BUTTON_).click()
Цитата Сообщение от torwald Посмотреть сообщение
auth.tracker()
не так, а auth(tracker)
1
0 / 0 / 0
Регистрация: 26.10.2022
Сообщений: 35
06.02.2023, 21:17  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
потому что ты делаешь не то что тебе говорят и не отвечаешь на прямые вопросы.

Поробую в последний раз - вот это какой класс умеет делать?



не так, а auth(tracker)
Это умеет делать класс AuthoPage
[PYTHON]class AuthoPage(BasePage):
locators = AuthoLocators()

def authorization_x(self):
self.element_is_visible(self.locators.LO GIN_).send_keys(USER_EMAIL_AUTHORIZATION )
self.element_is_visible(self.locators.PA SSWORD_).send_keys(EMAIL_PASSWORD)
self.element_is_visible(self.locators.LO G_IN_BUTTON_).click()

Так тоже не выходит auth(tracker)
Code
1
2
3
4
5
    def test_example(self, driver, auth):
        tracker = HomePage(driver, LOGIN_URL)
        tracker.open_site()
>       auth.tracker()
E       AttributeError: 'function' object has no attribute 'tracker'
Я нашел решение без фикстуры
Python
1
2
3
4
5
6
7
8
9
class TestTracker:
 
    def test_add_tracker(self, driver, auth):
        tracker = HomePage(driver,  HOME_URL)
        auth = AuthoPage(driver, LOGIN_URL)
        tracker.open_site()
        auth.authorization_x()
        tracker.tracker()
        time.sleep(10)
Но мне нужно сделать с фикстурой
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
06.02.2023, 21:25
Лучший ответ Сообщение было отмечено torwald как решение

Решение

Цитата Сообщение от torwald Посмотреть сообщение
Это умеет делать класс AuthoPage
воот, а где он в твоем коде? почему в фикстуре не создать его объект и не залогиниться?
1
0 / 0 / 0
Регистрация: 26.10.2022
Сообщений: 35
06.02.2023, 21:37  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
воот, а где он в твоем коде? почему в фикстуре не создать его объект и не залогиниться?
Хороший вопрос, только не понимаю как это сделать правильно

Python
1
2
3
4
5
6
7
8
class AuthoPage(BasePage):
    locators = AuthoLocators()
 
    def authorization_x(self):
        # print(company_email)
        self.element_is_visible(self.locators.LOGIN_).send_keys(USER_EMAIL_AUTHORIZATION)
        self.element_is_visible(self.locators.PASSWORD_).send_keys(EMAIL_PASSWORD)
        self.element_is_visible(self.locators.LOG_IN_BUTTON_).click()

Python
1
2
3
4
5
6
@pytest.fixture(scope="function")
def auth():
    def authorization_(self):
        auth_f = AuthoPage()
        return auth_f
    return authorization_
0
0 / 0 / 0
Регистрация: 26.10.2022
Сообщений: 35
20.02.2023, 19:08  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
воот, а где он в твоем коде? почему в фикстуре не создать его объект и не залогиниться?
Класс с функцией авторизации
Python
1
2
3
4
5
6
7
class AuthPage(BasePage):
    locators = AuthLocators()
 
    def authorization_x(self):
        self.element_is_visible(self.locators.LOGIN_AUTH).send_keys(USER_EMAIL_AUTHORIZATION)
        self.element_is_visible(self.locators.PASSWORD_AUTH).send_keys(EMAIL_PASSWORD)
        self.element_is_visible(self.locators.LOG_IN_BUTTON_AUTH).click()
В фикстуре сделал объект класса AuthPage и вызвал его метод authorization_x
Python
1
2
3
4
5
@pytest.fixture()
def auth():
    test = AuthPage(driver, LOGIN_URL)
    test.authorization_x()
    return auth
Передаю фикстуру в тест и тест падает, если в фикстуру просто принт засунуть она работает печатает в консоль
Python
1
2
3
4
5
class TestTracker:
 
    def test_add_tracker(self, driver, auth):
        tracker = HomePage(driver, LOGIN_URL)
        tracker.open_site()
Текст ошибки
Code
1
2
3
4
5
6
7
8
driver = <function driver at 0x0000016B28A83130>
 
    def _predicate(driver):
        try:
>           return _element_if_visible(driver.find_element(*locator))
E           AttributeError: 'function' object has no attribute 'find_element'
 
..\venv\lib\site-packages\selenium\webdriver\support\expected_conditions.py:125: AttributeError
Не понимаю почему 'function' object has no attribute 'find_element' этот класс наследуеться от BasePage где прописан этот метод find_element
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
20.02.2023, 19:59
torwald, дебаггер, освой его. Очевидно что там уже не драйвер, а функция.
0
0 / 0 / 0
Регистрация: 26.10.2022
Сообщений: 35
20.02.2023, 20:08  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
torwald, дебаггер, освой его. Очевидно что там уже не драйвер, а функция.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def visibility_of_element_located(locator):
    """An expectation for checking that an element is present on the DOM of a
    page and visible. Visibility means that the element is not only displayed
    but also has a height and width that is greater than 0.
    locator - used to find the element
    returns the WebElement once it is located and visible
    """
 
    def _predicate(driver):
        try:
            return _element_if_visible(driver.find_element(*locator))
        except StaleElementReferenceException:
            return False
 
    return _predicate
Вот эта функция и как я понял там драйвер, может ошибаюсь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.02.2023, 20:08
Помогаю со студенческими работами здесь

Тест Selenium IDE на java в eclipse
Мне нужно сделать тест через Selenium IDE на java. Программа не хочет запускаться с любыми тестами. Вот что я делал: Сначала я создал...

Автоматизированный тест Selenium для поиска текста
Выберите произвольный веб-сайт, спроектируйте и разработайте автоматизированный тест, который проходил бы по всем страницам сайта и искал...

Реализация разных @After для тест-методов в Selenium, JUnit
Здраствуйте, изучаю автоматизацию под Selenium, знакомлюсь с JUnit. Возник вопрос. К примеру у нас есть один, и только один класс. В нем...

Не передать текст с кавычками в xpath локатор selenium
Есть текст. var1 = 'ТСЖ &quot;ВОЛГОГРАДСКИЙ ПР-Т 50-1, 52-1, 52-2, 56-1, 56-2, 58-1, 58-3, 60-2, 64-1, 64-2, 66-2, ВОЛЖСКИЙ 21&quot;' ...

Selenium - "is not reachable by keyboard", не даёт передать текст в input
Получаю img с каптчей на сайте, обрабатываю, получаю разгаданную каптчу, дальше пытаюсь её вставить в input поле на сайте, но получаю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru