有没有办法编写适用于多个关键字的步骤。比如说我的功能是:
Scenario: Something happens after navigating
Given I navigate to "/"
And say some cookie gets set
When I navigate to "/some-other-page"
Then something happens because of that cookie
我试图避免同时定义两者:
@given('I navigate to "{uri}"')
def get(context, uri):
current_url = BASE_URL + uri
context.driver.get(current_url)
@when('I navigate to "{uri}"')
def get(context, uri):
current_url = BASE_URL + uri
context.driver.get(current_url)
如果您只定义一个并尝试使用它,则会出现raise NotImplementedError(u'STEP:
错误。通过上面的例子它并没有那么糟糕,因为这一步很简单,但重复代码似乎是不好的做法,你可能会遇到更复杂的事情发生同样的事情,对我来说似乎是这样的如果有像@all或@any关键字那样会有意义。
道歉,如果这已在某处得到解答,但搜索很难,因为很难找到针对此类问题的唯一搜索字词
答案 0 :(得分:3)
事实证明,这可以使用@step
来完成。 e.g。
from behave import step
@step('I navigate to "{uri}"')
def step_impl(context, uri):
current_url = BASE_URL + uri
context.driver.get(current_url)
将适用于:
Scenario: Demo how @step can be used for multiple keywords
Given I navigate to "/"
When I navigate to "/"
Then I navigate to "/"
答案 1 :(得分:1)
如果您不想使用@step,也可以执行以下操作:
@and(u'I navigate to "{uri}"')
@when(u'I navigate to "{uri}"')
@given(u'I navigate to "{uri}"')
def get(context, uri):
current_url = BASE_URL + uri
context.driver.get(current_url)
答案 2 :(得分:0)
@ given,@ when和@then装饰器代表什么在概念上有所区别。在某些情况下,某个步骤适用于全部,部分或仅一个步骤。
当该步骤仅适用于2种情况,然后依靠测试编写者仅在正确的情况下使用该步骤时,使用@step都很容易。我鼓励人们不要这样做。请改用以下示例。
@given('step text')
@when('step text')
def step_impl(context):
pass
但是,当某个步骤真正适用于所有情况时,一个很好的例子是延迟步骤,然后使用@step装饰器:
@step('delay {duration} second(s)')
def step_impl(context, duration):
time.sleep(float(duration))
答案 3 :(得分:-1)
您可以尝试这样的事情:
作为网络用户 鉴于我导航到“/”并说一些cookie被设置 然后我导航到“/ some-other-page” 因为那个cookie而发生了一些事情
答案 4 :(得分:-2)
它为我工作。当您在“Then”语句后面写“And”语句时,它会将其视为两个“Then”语句。你还应该在给定的内部括号中加上你的语句。
尝试如下:
@given(u'I navigate to "{uri}"')
def get(context, uri):
current_url = BASE_URL + uri
context.driver.get(current_url)
@given(u'say some cookie gets set')
def get(context, uri):
current_url = BASE_URL + uri
context.driver.get(current_url)
@then(u'I navigate to "/some-other-page"')
def step_impl(context):
//your code
@then(u'something happens because of that cookie')
def step_impl(context):
//your code