前提:創建一個text文件,用於存儲用戶名和密碼,再用代碼去調用文件

, root, ,122 root,123 yohonormal,123456
此文件中包含了 用戶名和密碼都為空、密碼為空、用戶名為空、密碼錯誤、用戶名和密碼都正確 的情況
1、打算把文件查看也封裝成一個方法,發現沒辦法把登錄加進去,寫了一個半成品,還沒搞好

from selenium import webdriver from time import sleep un = '' pw = '' # 打開谷歌瀏覽器 browser = webdriver.Chrome(r'/Users/chensihan/Downloads/chromedriver') # 最大化瀏覽器 browser.maximize_window() # 打開公司內部網站 browser.get("https://testsmallsystem.yoho8.com/login") # 給1秒鍾去打開頁面,沒打開頁面就去做其他操作,會報錯 sleep(1) # 獲取文件數據 def file(): # 將un,pw作為全部變量,在此函數中賦值后,在其他函數中可使用這個值,否則使用的是初始化的值 global un, pw, msg_line # 打開文件,讀取用戶名 msg = open('/Users/chensihan/Desktop/用戶名和密碼.txt', 'r') # 循環獲取每行內容 for line in msg: # 使用split按空格分割字符,並且用strip去除掉兩邊的空格,得到了一個列表msg_line, # msg_line的第0個元素就是文件第一行的用戶名,msg_line的第1個元素就是文件第一行的密碼 msg_line = line.strip().split() # 將msg_line的第0個元素賦值給un,用於登錄函數中輸入用戶名 un = msg_line[0] # 將msg_line的第1個元素賦值給pw,用於登錄函數中輸入密碼 pw = msg_line[1] msg.close() # 登錄 def login(): # 通過xpath定位用戶名輸入框,並清空輸入框 browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').clear() # 輸入用戶名 browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').send_keys(un) # 通過xpath定位密碼輸入框,並清空輸入框 browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').clear() # 輸入密碼 browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').send_keys(pw) sleep(1) # 登錄 browser.find_element_by_class_name('_1dNJXuqS50-Y8IDzBbpxeR').click() # 給網頁2秒加載時間 sleep(2) # 退出當前賬戶 def quit(): browser.find_element_by_class_name('_1ECz20e4Sb4cz8jt2QRoBL').click() sleep(2) # file() # login() # quit() def start(): while 1: file() if msg_line != []: login() quit() else: print('執行完畢!!!') break start() # # # 截取當前頁面 # browser.save_screenshot("/Applications/Google Chrome.app/p.png") # # 定位驗證碼 # yzm = browser.find_element_by_id('randImage') # # location = yzm.location # size = yzm.size # rangle = (int(location['x']), int(location['y']), int(location['x']+size['width']), int(location['y']+size['height'])) # # i = Image.open('/Applications/Google Chrome.app/p.png') # frame4 = i.crop(rangle) # frame4.save('/Applications/Google Chrome.app/frame4.png') # dym = Image.open('/Applications/Google Chrome.app/frame4.png') # text = pytesseract.image_to_string(dym) # browser.find_element_by_name('code').send_keys(text) # browser.find_elements_by_class_name('btn').click() 未完成的循環,可以不看
2、除文件外,其余都封裝成了方法

from selenium import webdriver from time import sleep un = '' pw = '' # 打開谷歌瀏覽器 browser = webdriver.Chrome(r'/Users/chensihan/Downloads/chromedriver') # 最大化瀏覽器 browser.maximize_window() # 打開公司內部網站 browser.get("https://testsmallsystem.yoho8.com/login") # 給1秒鍾去打開頁面,沒打開頁面就去做其他操作,會報錯 sleep(1) # 登錄 def login(): # 通過xpath定位用戶名輸入框,並清空輸入框 browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').clear() # 輸入用戶名 browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').send_keys(un) # 通過xpath定位密碼輸入框,並清空輸入框 browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').clear() # 輸入密碼 browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').send_keys(pw) sleep(1) # 登錄 browser.find_element_by_class_name('_1dNJXuqS50-Y8IDzBbpxeR').click() # 給網頁2秒加載時間 sleep(2) # 退出當前賬戶 def quit(): browser.find_element_by_class_name('_1ECz20e4Sb4cz8jt2QRoBL').click() sleep(2) # 打開文件,讀取用戶名 msg = open('/Users/chensihan/Downloads/老男孩/selenium測試/0測試用的用戶名和密碼', 'r') # 循環獲取每行內容 for line in msg: # 使用split按空格分割字符,並且用strip去除掉兩邊的空格,得到了一個列表msg_line, # msg_line的第0個元素就是文件第一行的用戶名,msg_line的第1個元素就是文件第一行的密碼 msg_line = line.strip().split() # 將msg_line的第0個元素賦值給un,用於登錄函數中輸入用戶名 un = msg_line[0] # 將msg_line的第1個元素賦值給pw,用於登錄函數中輸入密碼 pw = msg_line[1] # 容錯處理 # 正確的執行登錄和退出 # 關閉瀏覽器 browser.quit()
3、上邊的代碼只有正確賬號登錄,沒有兼容錯誤的賬號,本版本加了空賬號、缺失用戶名或密碼的

from selenium import webdriver from time import sleep un = '' pw = '' # 打開谷歌瀏覽器 browser = webdriver.Chrome(r'/Users/chensihan/Downloads/chromedriver') # 最大化瀏覽器 browser.maximize_window() # 打開公司內部網站 browser.get("https://testsmallsystem.yoho8.com/login") # 給1秒鍾去打開頁面,沒打開頁面就去做其他操作,會報錯 sleep(1) # 登錄 def login(): # 通過xpath定位用戶名輸入框,並清空輸入框 browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').clear() # 輸入用戶名 browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').send_keys(un) # 通過xpath定位密碼輸入框,並清空輸入框 browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').clear() # 輸入密碼 browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').send_keys(pw) sleep(1) # 登錄 browser.find_element_by_class_name('_1dNJXuqS50-Y8IDzBbpxeR').click() # 給網頁2秒加載時間 sleep(2) # 退出當前賬戶 def quit(): browser.find_element_by_class_name('_1ECz20e4Sb4cz8jt2QRoBL').click() sleep(2) # 打開文件,讀取用戶名 msg = open('/Users/chensihan/Downloads/老男孩/selenium測試/0測試用的用戶名和密碼', 'r') # 循環獲取每行內容 for line in msg: # 使用split按空格分割字符,並且用strip去除掉兩邊的空格,得到了一個列表msg_line, # msg_line的第0個元素就是文件第一行的用戶名,msg_line的第1個元素就是文件第一行的密碼 msg_line = line.strip().split(',') # 判斷是否輸入為空,如果獲取當前行的元素為0個 if len(msg_line) == 0: un = '' pw = '' else: # 將msg_line的第0個元素賦值給un,用於登錄函數中輸入用戶名 un = msg_line[0] # 將msg_line的第1個元素賦值給pw,用於登錄函數中輸入密碼 pw = msg_line[1] # 容錯處理 # 正確的執行登錄和退出 try: login() quit() # 錯誤的跳出當前循環 except: continue # 關閉瀏覽器 browser.quit() 加了錯誤處理
4、代碼可執行了,接下來就是把測試結果保存到文件,測試結果,就是發送登錄請求后,接口返回的數據,以及當前請求接口時使用的用戶名和密碼

from selenium import webdriver from time import sleep import requests import json un = '' pw = '' # 打開谷歌瀏覽器 browser = webdriver.Chrome(r'/Users/chensihan/Downloads/chromedriver') # 最大化瀏覽器 browser.maximize_window() # 打開公司內部網站 browser.get("https://testsmallsystem.yoho8.com/login_file") # 給1秒鍾去打開頁面,沒打開頁面就去做其他操作,會報錯 sleep(1) # 登錄 def login(): # 通過xpath定位用戶名輸入框,並清空輸入框 browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').clear() # 輸入用戶名 browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').send_keys(un) # 通過xpath定位密碼輸入框,並清空輸入框 browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').clear() # 輸入密碼 browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').send_keys(pw) sleep(1) # 登錄 browser.find_element_by_class_name('_1dNJXuqS50-Y8IDzBbpxeR').click() # 給網頁2秒加載時間 sleep(2) # 獲取登錄后登錄接口的數據 def request_url(): # 接口地址 url = 'https://testm.yoho8.com/apiauth/login/login' # 請求頭 headers = { "Content-Type": "application/json", } # 請求體。因為是先執行的登錄,所以使用當前登錄的用戶名和密碼來請求這個接口 data = { "userName": un, "password": pw, } # 獲取請求之后的返回信息 response = requests.post(url=url, data=json.dumps(data), headers=headers) print(response.text) # 將獲取的返回信息保存到文件中,並換行 with open('測試結果', 'a') as fp: fp.write('用戶名:' + un + ' ' + '密碼:' + pw + ' ' + '登錄結果:' + response.text + '\n') print('獲取成功!') # 退出當前賬戶 def quit(): browser.find_element_by_class_name('_1ECz20e4Sb4cz8jt2QRoBL').click() sleep(2) # 打開文件,讀取用戶名 msg = open('/Users/chensihan/Downloads/老男孩/selenium測試/login_file/0測試用的用戶名和密碼', 'r') # 循環獲取每行內容 for line in msg: # 使用split按空格分割字符,並且用strip去除掉兩邊的空格,得到了一個列表msg_line, # msg_line的第0個元素就是文件第一行的用戶名,msg_line的第1個元素就是文件第一行的密碼 msg_line = line.strip().split(',') # 判斷是否輸入為空,如果獲取當前行的元素為0個,則用戶名和密碼都為空 if len(msg_line) == 0: un = '' pw = '' else: # 將msg_line的第0個元素賦值給un,用於登錄函數中輸入用戶名 un = msg_line[0] # 將msg_line的第1個元素賦值給pw,用於登錄函數中輸入密碼 pw = msg_line[1] # 容錯處理 # 正確的執行登錄和退出 try: login() request_url() quit() # 錯誤的跳出當前循環 except: continue # 關閉瀏覽器 browser.quit() 輸出測試結果並保存文件
5、分析測試結果
通過結果中的errcode,篩選出errcode非0(即登錄不成功的狀態)的所有數據,將登錄的用戶名和密碼以及請求結果保存到新文件中
並且加了一行 “ if __name__ == '__main__': ” ,方便其他文件import此文件時,此文件內部的內容不會被執行

from selenium import webdriver from time import sleep import requests import json un = '' pw = '' # 打開谷歌瀏覽器 browser = webdriver.Chrome(r'/Users/chensihan/Downloads/chromedriver') # 最大化瀏覽器 browser.maximize_window() # 打開公司內部網站 browser.get("https://testsmallsystem.yoho8.com/login_file") # 給1秒鍾去打開頁面,沒打開頁面就去做其他操作,會報錯 sleep(1) # 登錄 def login(): # 通過xpath定位用戶名輸入框,並清空輸入框 browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').clear() # 輸入用戶名 browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').send_keys(un) # 通過xpath定位密碼輸入框,並清空輸入框 browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').clear() # 輸入密碼 browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').send_keys(pw) sleep(1) # 登錄 browser.find_element_by_class_name('_1dNJXuqS50-Y8IDzBbpxeR').click() # 給網頁2秒加載時間 sleep(2) # 獲取登錄后登錄接口的數據 def request_url(): # 接口地址 url = 'https://testm.yoho8.com/apiauth/login/login' # 請求頭 headers = { "Content-Type": "application/json", } # 請求體。因為是先執行的登錄,所以使用當前登錄的用戶名和密碼來請求這個接口 data = { "userName": un, "password": pw, } # 獲取請求之后的返回信息 response = requests.post(url=url, data=json.dumps(data), headers=headers) # print(response.text) # 將獲取的返回信息保存到文件中,並換行 with open('測試結果', 'a') as fp: fp.write('用戶名:' + un + ' ' + '密碼:' + pw + ' ' + '登錄結果:' + response.text + '\n') # print('獲取成功!') # 退出當前賬戶 def quit(): browser.find_element_by_class_name('_1ECz20e4Sb4cz8jt2QRoBL').click() sleep(2) # 分析測試結果 def test_result(): msg_dict = {} with open('測試結果', 'r') as fp: msg = fp.readlines() for line in msg: msg_line = line.strip().split() for i in msg_line: i1 = i.strip().split(',', 0) for i in i1: i2 = i1[0].split(':', 1) msg_dict[i2[0]] = i2[1] msg_dict['登錄結果'] = eval(msg_dict['登錄結果']) if msg_dict['登錄結果']['errCode'] != 0: with open('測試結果分析', 'a') as fp1: fp1.write(str(msg_dict) + '\n') print('分析完畢!') # 只在本文件中執行,被import的時候,不會執行整個程序 if __name__ == '__main__': # 打開文件,讀取用戶名 msg = open('/Users/chensihan/Downloads/老男孩/selenium測試/login_file/0測試用的用戶名和密碼', 'r') # 循環獲取每行內容 for line in msg: # 使用split按空格分割字符,並且用strip去除掉兩邊的空格,得到了一個列表msg_line, # msg_line的第0個元素就是文件第一行的用戶名,msg_line的第1個元素就是文件第一行的密碼 msg_line = line.strip().split(',') # 判斷是否輸入為空,如果獲取當前行的元素為0個,則用戶名和密碼都為空 if len(msg_line) == 0: un = '' pw = '' else: # 將msg_line的第0個元素賦值給un,用於登錄函數中輸入用戶名 un = msg_line[0] # 將msg_line的第1個元素賦值給pw,用於登錄函數中輸入密碼 pw = msg_line[1] # 容錯處理 # 正確的執行登錄和退出 try: login() request_url() quit() # 錯誤的跳出當前循環 except: continue test_result() # 關閉瀏覽器 browser.quit() 分析測試結果