使用了伟大的Behave框架,但我的OOP技能不足。在
behavior有一个内置的上下文命名空间,可以在测试执行步骤之间共享对象。在初始化WebDriver会话之后,我使用这个context
在步骤之间传递它来保存所有内容。功能很好,但正如您在下面看到的,它不是干的。在
如何/在何处只能将这些属性添加到step_impl()
或context
一次?在
环境.py
from selenium import webdriver
def before_feature(context, scenario):
"""Initialize WebDriver instance"""
driver = webdriver.PhantomJS(service_args=service_args, desired_capabilities=dcap)
"""
Do my login thing..
"""
context.driver = driver
context.wait = wait
context.expected_conditions = expected_conditions
context.xenv = env_data
步骤.py
^{pr2}$
为了坚持干法则,我通常使用:
*背景故事:http://pythonhosted.org/behave/gherkin.html#background
*或环境控制:http://pythonhosted.org/behave/tutorial.html#environmental-controls
您可以定义一个修饰符,为您“解包”上下文并将“unpacked”值作为参数传递:
环境.py
测试功能
^{pr2}$步骤.py
首先,您可以跳过这个解包,在任何地方使用
context
属性,比如context.driver.get("http://domain.com")
如果您不喜欢它,并且您确实希望使用局部变量,可以使用元组解包来使代码稍微好一点:
您可以将这样的默认属性列表分解出来,但这会使整个过程有点含蓄:
^{pr2}$如果你仍然不喜欢,你可以用
globals()
来捣乱。例如一个类似crate的函数:在你的步骤中使用它:
这将减少代码中的重复,但这是非常隐式的,可能很危险。所以不建议这样做。在
我只需要使用元组解包。它简单明了,所以不会引起额外的错误。在
相关问题 更多 >
编程相关推荐