Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Как использовать только часть метода, для написания нового Python + Selenium

python
webdriver
Теги: #<Tag:0x00007fedb7466958> #<Tag:0x00007fedb74667f0>

#1

Привет всем.

Ребята возник вопрос по использованию методов в связке #python + #webdriver .
У меня есть метод, пример:

def test_add_filter(app):
    app.session.login(username='888', password='8888)
    app.dash.available_orders()
    time.sleep(3)
    app.fil.add_filter()
    time.sleep(3)
    app.fil.add_id()
    time.sleep(3)
    app.fil.add_operator_1()
    time.sleep(3)
    app.fil.search_value(search_value='1105432')
    app.fil.apply_filters()
    time.sleep(3)
    # Verify filtered order
    app.fa.filters_assert_id(order_id='1105432')
    app.fa.filters_assert_topic(topic='Test_filters_1')
    app.fa.filters_assert_subject(subject='Marketing')

И мне нужно например использовать только часть метода этого, например до строчки # Verify filtered order, и при этом создать новый на основе этой части. Подскажите пожалуйста как это сделать, я не очень силен в этом вопросе. Спасибо заранее.


(Yaroslav Pernerovskyy) #2

Обилее time.sleep(3) вас не пугает? Тогда используйте инновационный метод - Copy/Paste!

готово!

def test_add_filter2(app):
    app.session.login(username='888', password='8888)
    app.dash.available_orders()
    time.sleep(3)
    app.fil.add_filter()
    time.sleep(3)
    app.fil.add_id()
    time.sleep(3)
    app.fil.add_operator_1()
    time.sleep(3)
    app.fil.search_value(search_value='1105432')
    app.fil.apply_filters()
    time.sleep(3)

#3

мне бы не хотелось этого делать, ибо хочется уменьшить число строк в коде, а проблему с sleep пока еще решаю, но вопрос не об этом)


(Yaroslav Pernerovskyy) #4

Тогда так:


def test_add_filter(app):
    shared_part(app)
    # Verify filtered order
    app.fa.filters_assert_id(order_id='1105432')
    app.fa.filters_assert_topic(topic='Test_filters_1')
    app.fa.filters_assert_subject(subject='Marketing')

def test_add_filter2(app):
    shared_part(app)

def shared_part(app):
    app.session.login(username='888', password='8888)
    app.dash.available_orders()
    time.sleep(3)
    app.fil.add_filter()
    time.sleep(3)
    app.fil.add_id()
    time.sleep(3)
    app.fil.add_operator_1()
    time.sleep(3)
    app.fil.search_value(search_value='1105432')
    app.fil.apply_filters()
    time.sleep(3)

#5

спасибо, может тогда сможете помочь с sleep, дело в том, что система отрабатывает не так быстро как это делает тест, поэтому пока как временное решение пришлось проставить sleep, что можете посоветовать?


(Виталий Коряков) #6

Ставьте ожидания в СетАпе


#7

я проставил implicitly_wait, но что-то не помогает


(Виталий Коряков) #8

что бы разобраться с вопросом - надо больше кода. Как вы работаете с ожиданиями, что методы делают, и т д, ничего не понятно же


(Yaroslav Pernerovskyy) #9

Вам надо юзать ожидания, которые будут к месту. implicitly_wait банально ждет появление элемента в DOM дереве перед его поиском. У вас же, скорее всего, в методах add_filter(), add_id() и.п. происходят какие-то действия по бизнес логике приложения, и вам надо ждать когда они завершатся. Тут вам помогут явные ожидания которые скорее всего надо добавлять не в тест, а в классы объектов апликейшена, но это надо понимать что происходит в этом апликейшине и как написаны конкретные методы.


(Виталий Коряков) #10

Гляньте видео из этой темы, очень хорошее объяснение по ожиданиям
Линка на обсуждение


Линка на видео