使用或在 .feature 文件中表现 python

Behave in python using or in .feature fles

我需要 Behave 通过完整场景,即使至少有 1 个元素是正确的,并且在找到 none 个元素时失败。

例如,我曾尝试过类似的操作,但它 returns 对于未找到的元素是错误的,并且仅对于找到的元素是正确的。

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

1.首先,你不能在这种情况下使用场景大纲。 场景大纲实际上会拆分成场景,如果在示例中你有 3 行 (1,2,3) 那么就会有 3 个场景 运行 而每个场景只验证 1 个元素。

2。 Behave (Gerkin) 没有 "OR" 这样的东西。你必须在步骤定义中做你想做的事。

你的第二个场景可以使用:

场景:元素
屏幕加载时
那么元素“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")

我找到了解决方法,允许我在 Behave 中检查 1 个或多个元素并在后续步骤中重用它。幸好它不会破坏我们的代码库,因为如果只检查一个元素它仍然可以工作。

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