selenium实现绕过登录

痛点:在做web自动化的时候,每一个测试类都要去进行登录,这实在是太耗费性能,想着在整个测试周期内,只用登录一次就好了,完美

解决方案:我们一般是用的是用cookie来控制登录状态,然而在selenium中有针对cookie的方法,下面做下简单实现

思路:

1、做登录操作

2、获取目前的cookies,将其存储在一个文件中

3、删除目前所有的cookie

4、在每一个测试类的类前置去拿到cookie并将其添加到driver中

下面是实现代码(以课堂派来做个列子)

 1 import json
 2 from time import sleep
 3 from selenium import webdriver
 4 import pytest
 5 
 6 
 7 
 8 class TestLogin:
 9     def test_login(self):
10 
11         dir = webdriver.Chrome()
12         dir.get("https://v4.ketangpai.com/")
13         dir.maximize_window()
14         sleep(2)
15         dir.find_element_by_xpath('//a[text()="登录"]').click()
16         sleep(1)
17         dir.find_element_by_xpath('//input[contains(@placeholder,"手机号")]').send_keys('XXXXXX@163.com')
18         dir.find_element_by_xpath('//input[contains(@placeholder,"密码")]').send_keys("XXXXXXX")
19         sleep(1)
20 
21         dir.find_element_by_xpath('//a[contains(@class,"btn-btn")]').click()
22         cookie = dir.get_cookies()   # 获取目前多有的cookies
23 
24         with open("cookie.txt","w+") as f:
25             f.write(json.dumps(cookie))    # 将目前所有的cookies存储到文件中
26         dir.delete_all_cookies()    # 删除目前内存中所有的cookies
27 
28 
29 
30 class TestA:
31     def setup_class(self):
32         self.driver = webdriver.Chrome()
33         self.url = "https://v4.ketangpai.com/"
34         self.driver.get(self.url)   # 这里必须调用下域名,让selenium知道你是想添加哪一个域名下的cookies
35 
36         with open("./cookie.txt") as f:
37             data = json.loads(f.read())
38             self.driver.delete_all_cookies()
39             for i in data:
40                 self.driver.add_cookie(i)     # 将文件中的cookie取出来添加到driver中
41 
42     def teardown_class(self):
43         self.driver.close()
44 
45 
46     def test_1(self):
47         self.driver.get("https://v4.ketangpai.com/Resource/index.html")
48         sleep(2)
49         assert self.driver.find_element_by_xpath('//a[text()="个人备课"]').text == '个人备课'
50 
51 
52 
53 class TestB:
54     def setup_class(self):
55         self.driver = webdriver.Chrome()
56         self.url = "https://v4.ketangpai.com/"
57         self.driver.get(self.url)    # 这里必须调用下域名,让selenium知道你是想添加哪一个域名下的cookies
58 
59         with open("./cookie.txt") as f:
60             data = json.loads(f.read())
61             self.driver.delete_all_cookies()
62             for i in data:
63                 self.driver.add_cookie(i)    # 将文件中的cookie取出来添加到driver中
64 
65     def teardown_class(self):
66         self.driver.close()
67 
68     def test_2(self):
69         self.driver.get("https://v4.ketangpai.com/Mooc/Mooc/index.html")
70         sleep(2)
71         assert self.driver.find_element_by_xpath('//li[text()="我的在线课程"]').text == "我的在线课程"
72 
73 
74 if __name__ == '__main__':
75     pytest.main()

 

从上面的代码执行结果我们可以发现,在做TestA和TestB的时候是没有做登录操作的,也可以实现页面的直接跳转进行测试

posted @ 2021-04-28 16:20  大渝  阅读(850)  评论(1编辑  收藏  举报