Size: a a a

testing_in_python

2021 June 24

M

Mr.Anderson in testing_in_python
попробую и таким образом.. Благодарю
источник

MZ

Maxim Zaitsev in testing_in_python
да, есть такое. Явное ожидание не сильно помогает. Обычно таймаут в 1 секунду решает вопрос. Либо заморачиваться с  отключением анимации или как вариант - некоторые js-библиотеки позволяют отслеживать завершения анимации на странице. Но проще секунду ожидания поставить :)
источник

AR

Alex Radchenko in testing_in_python
У меня на одном проекте так и было в итоге просто прописал в настройках таймаут для анимании 0.5 c и стал и вставлять для работы с дропдаун списками и сразу тесты стали сильно более стабильными.
источник

AR

Alex Radchenko in testing_in_python
А вот небольшая моя шпаргался по XPATH, в большенстве случаев у меня что-то из ниже описанного

По части ссылки
//a[contains(@href, 'sportmail.ru')]


По части ссылки и текста
//a[contains(@href, '/edit') and contains(text(),'qwerty')]

По классу и тексту
//*[@class='myclass' and contains(text(),'qwerty')]

По классу
//*[@class='myclass']

По ID
//input[@id='gender-radio-1']

По тексту кнопки
//button[text()='Double-Click Me To See Alert']
источник

MZ

Maxim Zaitsev in testing_in_python
сделай helper модуль и не нужны шпаргалки xD
источник

MZ

Maxim Zaitsev in testing_in_python
источник

AR

Alex Radchenko in testing_in_python
тут немного вопрос не про это был.
А так да правильное решение выносить поиски отдельно
источник

AR

Alex Radchenko in testing_in_python
@m_zaitsev я бы для удобства еще добавил бы что-то типо такого, что бы автоматом определял тип локатора CSS, XPATH или что-то другое...


   def selector_to_by(self, by_xpath_or_by):
       if isinstance(by_xpath_or_by, tuple):
           return by_xpath_or_by
       if (by_xpath_or_by.startswith('/') or
               by_xpath_or_by.startswith('./') or
               by_xpath_or_by.startswith('..') or
               by_xpath_or_by.startswith('(')):
           return By.XPATH, by_xpath_or_by

       else:
           return By.CSS_SELECTOR, by_xpath_or_by
источник

MZ

Maxim Zaitsev in testing_in_python
ну прям вообще все из исходников selene содрали )
источник

AR

Alex Radchenko in testing_in_python
Так Яша не против :):)
источник

MZ

Maxim Zaitsev in testing_in_python
есть вариант проще - просто использовать selene xD
источник

AR

Alex Radchenko in testing_in_python
selene один Яша делает, и что делать если ему это надоест?
источник

MZ

Maxim Zaitsev in testing_in_python
6 лет уже как ... И не один последний год. Ну если что, кто-нибудь форкнет и продолжит борьбу за унификацию
источник

AR

Alex Radchenko in testing_in_python
Тогда буду переписывать. Что бы было уникальным. 😂
источник

AR

Alex Radchenko in testing_in_python
Кстати @m_zaitsev  спасибо за ссылу пару интересных идей нашел для себя
источник

AV

Artem Veselov in testing_in_python
идея такова: создание пользователя, далее изменение роли пользователя в базе и далее авторизация пользователя и получение токена. подскажите как правильно задействовать фикстуру изменения роли пользователя? накодил такое и тесты ругаются
>       change_role_in_db()
E       TypeError: 'NoneType' object is not callable

# change role for test user
@pytest.fixture(scope='session')
def change_role_in_db():
   conn = psycopg2.connect("user=postgres dbname=ubermerch sslmode=disable")
   cur = conn.cursor()
   cur.execute("UPDATE users SET roles = '{10}' WHERE phone = '88000035355';")


# register test user
@pytest.fixture(scope='session')
def signup_test_user():
   url = urllib.parse.urljoin(service_url['auth'], 'auth/sign_up_by_phone')
   auth = {
       'phone': test_data['phone']
   }
   response = requests.post(url, json=auth)
   response_body = response.json()
   password = response_body['data']
   return password


# take a token from new user
@pytest.fixture(scope="session")
def take_token(change_role_in_db, signup_test_user):
   auth = {
       'phone': test_data['phone'],
       'data': signup_test_user
   }
   sign_in = urllib.parse.urljoin(service_url['auth'], 'auth/sign_in')
   response_sign_in = requests.post(sign_in, json=auth)
   change_role_in_db()
   sign_in_body = response_sign_in.json()
   token = sign_in_body['data']
   return token
источник

AV

Artem Veselov in testing_in_python
и вообще можно ли это вызывать как подготовку к тестам? и как это сделать?
источник

AS

Alex Svischev in testing_in_python
Фикстура создается до теста (в данном случае еще и выполняется).  Поэтому попытка вызова - проваливается. Можно передать в фикстуре экземлпяр класса и вызвать его метод из теста. Либо передать функцию как параметр, посмотри что-нибудь типа https://stackoverflow.com/questions/706721/how-do-i-pass-a-method-as-a-parameter-in-python/706735 ну и про фикстуры в доке pytest почитай
источник

AV

Artem Veselov in testing_in_python
спасибо
источник

А

Александр in testing_in_python
Привет коллеги подскажите возможно кто сталкивался
после рефакторинга не запускаются тесты
вот такая ошибка
AttributeError: 'PytestPluginManager' object has no attribute 'registration_endpoint'
источник