2017-07-17 231 views
0

是否有辦法編寫適用於多個關鍵字的步驟?好比說我的特點是:定義適用於多個關鍵字的Behave步驟(例如Given,When和Then)

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

原來,這可以使用@step完成。例如

from behave import step 

@step('I navigate to "{uri}"') 
def get(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 "/" 

注:從ticket導致這個file想通了這一點。

-1

你可以嘗試這樣的事情的一個很難的事情:

由於網絡用戶 鑑於我瀏覽到「/」,並說了一些餅乾被設定 然後我瀏覽到「/一些,其它頁面」 而且事情發生,因爲該cookie

+0

我正在做類似的事情,但如果您沒有在步驟文件中將兩個不同的函數定義爲Given和Then(在您的示例中),則會出現「raise NotImplementedError(u'STEP:」錯誤。如果這個工作沒有做兩次,你的步驟定義是什麼樣子的? – Cynic

+0

它對我有效當你在「Then」語句後面寫下「And」語句時,它將它視爲兩個「Then」語句 – user8021958

-1

及其工作我。當你在「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 
+0

Yeah ,我說我的問題是,如果你同時編寫一個'''@given('我導航到「{uri}」')和一個'''@when('我導航到「{通過定義它兩次,你只是在做'''@given'(你可以導航到「{uri}」)''''''''''''' ''然後(u'I導航到「/ some-other-page」')''''這將複製導航代碼 – Cynic

相關問題