Как сохранить работу селенового веб-драйвера как часть ловушки before_tag, используя приспособление в каркасе поведения? - PullRequest
0 голосов
/ 06 ноября 2019

Я использую Поведение Framework для тестирования, и для некоторых файлов функций не требуется браузер для запуска. Поэтому я пытаюсь использовать приборы с тегами, как описано в https://behave.readthedocs.io/en/latest/tutorial.html#controlling-things-with-tags. Проблема в том, что CLEANUP-FIXTURE PART запускается сразу после запуска драйвера.

environment.py



@fixture
def selenium_webdriver(context):
    # -- SETUP-FIXTURE PART:
    context.driver = webdriver.Remote(
        command_executor='http://my-selenium-server:4444/wd/hub',
        desired_capabilities=DesiredCapabilities.CHROME)
    context.driver.set_page_load_timeout(30)
    context.driver.maximize_window()
    yield context.driver
    # -- CLEANUP-FIXTURE PART:
    context.driver.quit()

fixture_registry1 = {
    "fixture.selenium_webdriver": selenium_webdriver
}

def before_tag(context, tag):
    if tag.startswith("fixture.selenium_webdriver"):
        return use_fixture_by_tag(tag, context, fixture_registry1)

test.feature

@fixture.selenium_webdriver
Feature: Test

  Scenario: My Scenario
    Given Something
    When I do anything
    Then Something happens

Во время выполнения сценариев драйвер успешно запускается, однако сразу же заканчивается. Я пытался прокомментировать строки под CLEANUP-FIXTURE PART:, чтобы он продолжал работать, но ведет себя как будто потеря связи с сеансом селена. Любые мысли о том, как запустить только селен вебдрайвер для конкретных тегов и функций?

1 Ответ

0 голосов
/ 11 ноября 2019

Хорошо, перечитав документацию, я нашел решение, которое помогло мне. Вот что я сделал:

environment.py

@fixture
def selenium_webdriver(context):
    # -- SETUP-FIXTURE PART:
    context.driver = webdriver.Remote(
        command_executor='http://my-selenium-server:4444/wd/hub',
        desired_capabilities=DesiredCapabilities.CHROME)
    context.driver.set_page_load_timeout(30)
    context.driver.maximize_window()
    yield context.driver
    # -- CLEANUP-FIXTURE PART:
    context.driver.quit()

fixture_registry1 = {
    "fixture.selenium_webdriver": selenium_webdriver
}

def before_feature(context, feature):
    if "fixture.selenium_webdriver" in feature.tags:
        use_fixture(selenium_webdriver, context)

test.feature

@fixture.selenium_webdriver
Feature: Test

  Scenario: My Scenario
    Given Something
    When I do anything
    Then Something happens

Используя хук before_feature вместо before_tag, все получилось.

...