Korzystanie z doskonałej struktury Behave, ale kłopot z moim brakiem umiejętności OOP.Dodawanie wspólnych atrybutów do metody Behave
Zachowanie ma wbudowaną przestrzeń nazw kontekstu, w której obiekty mogą być współużytkowane między krokami wykonania testu. Po zainicjowaniu sesji WebDriver, przechodzę dalej między moimi krokami, używając tego context
do przechowywania wszystkiego. Funkcjonalność jest w porządku, ale jak widać poniżej, nie jest to nic innego jak SUCHEGO.
Jak/gdzie mogę jednorazowo dodać te atrybuty do step_impl()
lub 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/")
Czy pytanie tylko w jaki sposób uniknąć wszystkich rozpakowaniu z ' kontekst "w każdej funkcji' step_impl'? Powiedziałbym, że możesz wyciąć kilka z nich po prostu pomijając przedmioty, których nie będziesz używać później (np. 'Xenv' wszędzie,' wait' i 'expected_conditions' w ostatniej wersji). Poza tym możesz pominąć rozpakowywanie i po prostu użyć atrybutów kontekstu bezpośrednio, np. 'context.driver.get (cokolwiek)'. Wiem niewiele o Behave, więc nie jestem pewien, czy to jest odpowiedź. – Blckknght
Dzięki. Tak, aby uniknąć rozpakowywanie * i * uniknąć powielania poprzez wywołanie 'context.attribute.something' za każdym razem, z których żadna nie czują się bardzo pythonic –