Я пытаюсь проверить, что пользователи, вошедшие в систему, могут выйти из системы на моем сайте Django с помощью Lettuce, Selenium и lettuce_webdriver.
В моем Terrain.py у меня есть:
@before.all
def setup_browser():
profile = webdriver.FirefoxProfile()
profile.set_preference('network.dns.disableIPv6', True)
world.browser = webdriver.Firefox(profile)
world.client = Client(HTTP_USER_AGENT='Mozilla/5.0')
И затем, когда я «вхожу в систему»:
@step(r'I am logged in as "(\w*)"')
def log_in(step, name):
world.client.login(username=name, password=name)
И я захожу на свой сайт:
And I go to "localhost:8000"
I find a link called "Logout ?" that goes to "/logout"
@step(r'I find a link called "(.*?)" that goes to "(.*?)"$')
def find_link(step, link_name, link_url):
print(world.browser.page_source)
elem = world.browser.find_element_by_xpath(r'//a[@href="%s"]' % link_url)
eq_(elem.text, link_name)
Но мой page_source показывает, что я не вошел в систему. Это имеет смысл... в том, что client
и browser
не разговаривают друг с другом. Но возможно ли это, или мне нужно войти в систему «вручную», щелкнув ссылки с селеном и т. Д.?
Я хотел бы сделать это:
world.browser.page_source = world.client.get(world.browser.current_url).content
Но page_source изменить нельзя. Могу ли я каким-то образом кормить Selenium из клиента django?
Изменить: следуя приведенному ниже совету Loius', мой шаг "Я вошел в систему как..." выглядит следующим образом. Я добавил if/else, чтобы просто проверить свои подозрения. Мой клиент по-прежнему настроен, как указано выше (см. шаг setup_browser
выше)
@step(r'I am logged in as "(\w*)"')
def log_in(step, name):
world.client.login(username=name, password=name)
if world.client.cookies:
session_key = world.client.cookies["sessionid"].value
world.browser.add_cookie({'name':'sessionid', 'value':session_key})
world.browser.refresh()
else:
raise Exception("No Cookies!")
Все советы, которые я видел, это сначала войти в систему. Без моего чека я получаю это:
Scenario: Logged in users can logout # \gantt_charts\features\index.feature:12
Given I am logged in as "elsepeth" # \gantt_charts\features\steps.py:25
Traceback (most recent call last):
File "C:\Python34\lib\site-packages\lettuce\core.py", line 144, in __call__
ret = self.function(self.step, *args, **kw)
File "D:\Django_Projects\gAnttlr\gantt_charts\features\steps.py", line 27, in log_in
session_key = world.client.cookies["sessionid"].value
KeyError: 'sessionid'