所以我有一个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登录的页面。
提前致谢。
您无法从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/')