当Gherkin步骤参数本身具有作为步骤一部分的字符串时,如何处理这种情况

时间:2017-06-28 17:32:52

标签: python cucumber specflow gherkin python-behave

我遇到一个问题, python behave 解析一个步骤定义很奇怪,当我传递的参数之一是步句本身的一部分时。

这是步骤定义

@when(u'I set the value of {setting} to {value} in configuration')

def **step_imp**(context, setting, value):
 print ("Setting:", setting , " Value:", value)    
 pass

我的功能示例看起来像

Scenario: Configuration Update
Given I can access the configuration file
When I set the value of **CDROM Drive** to **G:** in configuration
When I set the value of **USB TO IGNORE** to **USB2.0** in configuration

它适用于第一个when语句。但是对于2nd When语句,行为解析器解析并将参数{setting}作为 USB 和{value}作为 USB2.0 。由于" to" 是一个单词,它是步骤本身的一部分,因此在解析 USB TO IGNORE 时,行为解析器会忽略来自" TO&的单词#34;

任何可能的解决方案而不省略参数中的空格? 感谢

2 个答案:

答案 0 :(得分:0)

用引号括住步骤参数?

答案 1 :(得分:0)

是的,只是在功能文件中的参数周围使用双引号而不是星号,并且(这是使得'to'出现的差异的原因)在步骤文件的大括号周围放置双引号,例如@when(u'I set the value of "{setting}" to "{value}" in configuration')。我也认为你不需要**step_imp**周围的星号。但我具体针对python行为。

如果有人因为我做的原因而在这里结束,你如何在参数中逃避双引号。看起来你只是在双引号之前使用正斜杠\。这是我尝试的第一件事,但是有一些其他因素导致我的测试得到一个解析错误,我找不到任何人明确说这是一个逃避任何地方的正斜线,所以想要在某处记录它以防万一其他人最终鹅追逐。

  Scenario: If we enter an xss attack it should not work on another page
  Given I am on "/example-page"
  When I set current element to search field
   and I send the attack "\">alert(1)"
  Then I am on "/?s=%5C\"><%2Flabel><h1+id%3DXSS>Hello<%2Fh1><label><input+#search-form"  
  and there should not be an element with this locator "h1#XSS"