一尘不染

将LiveServerTestCase与Django一起使用时,使用代码登录

selenium

所以我有一个Selenium功能测试套件。我已经在一些测试中测试了登录/注册功能,方法是将Selenium客户端导航到注册页面,输入用户名和密码,然后告诉Selenium使用相同的凭据登录。现在,我想测试站点“需要登录”区域的其他部分,而不必告诉Selenium单击并在测试浏览器中输入文本。

换句话说,我想使用这样的东西(我在视图单元测试中使用得很好):

self.client = Client()  
self.user = User.objects.create_user('temporary', 'temporary@gmail.com', 'temporary')  
self.user.save()  
self.client.login(username='temporary', password='temporary')

在我的Selenium测试中,因此我不必在每个测试中都重复冗长的手动登录过程(因为正如我之前所说,我已经在较早的测试中测试了登录系统)

截至目前,我只是为需要登录的每个测试复制并粘贴“登录流程”
Selenium指令。这会使我的测试每个额外花费5-6秒,这使我的function_tests.py文件非常膨胀。

我所有的Google搜寻知识都带我到一些教我如何测试Selenium登录的页面。

提前致谢。


阅读 281

收藏
2020-06-26

共1个答案

一尘不染

您无法从Selenium驱动程序登录用户。没有一些黑客,这是不可能的。

但是您可以通过将每个TestCase移到setUp方法来登录一次。

您还可以通过创建从LiveServerTestCase继承的类来避免复制粘贴。

更新

这段代码对我有用:

self.client.login(username=superuser.username, password='superpassword') #Native django test client
cookie = self.client.cookies['sessionid']
self.browser.get(self.live_server_url + '/admin/')  #selenium will set cookie domain based on current page domain
self.browser.add_cookie({'name': 'sessionid', 'value': cookie.value, 'secure': False, 'path': '/'})
self.browser.refresh() #need to update page for logged in user
self.browser.get(self.live_server_url + '/admin/')
2020-06-26