我正在为(https://www.songtrust.com)编写测试的网站具有通过API处理的注销操作。
我有一个简单的测试,部分执行以下操作:
it('Logout', () => {
//click the left nav
cy.get('.fa-bars').click()
//click the logout link
cy.get('#logout-submit').click()
})
菜单中的“注销”链接具有以下href:
<a id="logout-submit" href="#" class="action">LOGOUT</a>
单击链接将触发对http://app.songtrust.com/api/v1/user/logout/
的API调用。成功响应后,站点将通过删除用户会话cookie并将其重定向到站点主页进行响应。
处理此操作的页面上的js:
$('#logout-submit').on('click', function () {
stlib.api(stlib_api_url + 'user/logout/', {}, 'GET', go_home, go_home)
})
还有一些删除会话cookie的python代码:
def logout(self, request, **kwargs):
self.method_check(request, allowed=['get'])
if request.user and request.user.is_authenticated():
logout(request)
response = self.create_response(request, {'success': True})
response.delete_cookie('logged_in_state')
return response
Cypress通过以下方式处理定位标记中的href:
如您所见,我单击#logout-submit元素,它会正确触发对“ logout”端点的API调用。然后,URL解析为https://app.songtrust.com/dashboard/#
,基本上是将哈希附加到我当前所在页面的末尾。从那时起,事情陷入僵局。不会触发预期的重定向,并且页面一直处于加载状态,直到赛普拉斯超时。我相信它可以通过在事件“卡住”之前删除cookie来成功终止会话。
当在赛普拉斯浏览器窗口中手动执行时,这当然可以正常工作。
是否有某种方法可以解决我没有考虑的问题,或者这只是我需要解决的Cypress工具中的空白?我对赛普拉斯还很陌生,因此可以提供任何指导。