Вести себя в питоне, используя или .feature fles - PullRequest
0 голосов
/ 30 ноября 2018

Мне нужно, чтобы Behave прошел полный сценарий, даже если хотя бы один элемент является правильным, и завершился неудачей, когда ни один из них не был найден.

Например, я пробовал что-то подобное, но он возвращает ошибку для элементов, которые былине найдено и верно только для найденных элементов.

Scenario Outline: Elements
   When Screen loads
   Then Element "<element>" is visible

 Examples: Consumer Electronics
   | element       |
   | 1             |
   | 2             |
   | 3             |

# or this:

Scenario: Elements
   When Screen loads
   Then Element "1" or "2" or "3" is visible

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Я нашел обходной путь, который позволил мне проверить 1 или более элементов в Behave и повторно использовать его в последующих шагах.Хорошо, что это не нарушает нашу кодовую базу, поскольку все еще работает, если проверен только один элемент.

Scenario: Elements
    When Screen loads
    Then Element "1 or 2 or 3" is visible

@then('Then Element "{element}" is visible')
    def step_impl(context, element):
        posible_elements = element.split(' or ')
        for elem in posible_element:
            # make check for each elem
            # or save visible element to context.visible_element
0 голосов
/ 30 ноября 2018

1.Во-первых, вы не можете использовать схему сценария в этой ситуации. Схема сценария фактически будет разделена на сценарии, если в примерах у вас есть 3 строки (1,2,3), тогда будут выполняться 3 сценария, и каждый сценарий только проверяет 1Элемент.

2.В поведении (Геркин) нет ничего похожего на «ИЛИ».вы должны делать то, что вы хотите в определении шага.

ваш второй сценарий может быть использован:

Сценарий: элементыКогда экран загружаетсяТогда элемент "1" или "2" или "3" виден

@then('Element "{element1}" or "{element2}" or "{element3}" is visible')
def step_assert_element(context, element1, element2, element3):
    elm1 = Page(context.driver).is_element_visible(elm1_locator)
    elm2 = Page(context.driver).is_element_visible(elm2_locator)
    elm3 = Page(context.driver).is_element_visible(elm3_locator)
    assert_that(elm1 or elm2 or elm3, equal_to(True), "Verify One of Element is visible")
...