使用偉大的Behave框架,但遇到我缺乏OOP技能的麻煩。將常見屬性添加到Behave方法
行爲具有內置的上下文命名空間,其中可以在測試執行步驟之間共享對象。在初始化我的WebDriver會話之後,我一直使用這個context
來保存所有內容。功能很好,但正如你可以在下面看到的,它是乾的。
如何/在哪裏可以將這些屬性添加到step_impl()
或context
一次?
environment.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
steps.py
@given('that I have opened the blah page')
def step_impl(context):
driver = context.driver
wait = context.wait
expected_conditions = context.expected_conditions
xenv = context.xenv
driver.get("http://domain.com")
driver.find_element_by_link_text("blah").click()
wait.until(expected_conditions.title_contains("Blah page"))
@given(u'am on the yada subpage')
def step_impl(context):
driver = context.driver
wait = context.wait
expected_conditions = context.expected_conditions
xenv = context.xenv
if driver.title is not "MySubPage/":
driver.get("http://domain.MySubPage/")
wait.until(expected_conditions.title_contains("Blah | SubPage"))
@given(u'that I have gone to another page')
def step_impl(context):
driver = context.driver
wait = context.wait
expected_conditions = context.expected_conditions
xenv = context.xenv
driver.get("http://domain.com/MyOtherPahge/")
就是如何避免一切從'拆包的問題每個'step_impl'函數中的上下文嗎?我想說,你可以通過跳過稍後不打算使用的項目(例如,上個版本中的'xenv','wait'和'expected_conditions')來刪除一堆。除此之外,您可以跳過一些拆包,並直接使用上下文的屬性,例如'context.driver.get(無論)'。我對Behave一無所知,所以我不確定這是否是一個答案。 – Blckknght
謝謝。是的,爲了避免所有的拆包*和*每次都通過調用'context.attribute.something'來避免重複,這兩者都沒有感覺到Pythonic –