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

Привет всем.

Ребята возник вопрос по использованию методов в связке #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, и при этом создать новый на основе этой части. Подскажите пожалуйста как это сделать, я не очень силен в этом вопросе. Спасибо заранее.

Обилее 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)

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

Тогда так:


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)
2 лайка

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

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

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

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

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

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

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

1 лайк