Selenium
- 使瀏覽器兼容性測試自動化成為可能,但是在不同的瀏覽器上依然有細微的差別
- 測試瀏覽器的兼容性——測試你的應用程序看是否能夠很好得工作在不同瀏覽器和操作系統之上。
- 測試系統功能——創建回歸測試檢驗軟件功能和用戶需求。支持自動錄制動作和自動生成 .Net、Java、Perl等不同語言的測試腳本。
- 框架底層使用JavaScript模擬真實用戶對瀏覽器進行操作。測試腳本執行時,瀏覽器自動按照腳本代碼做出點擊,輸入,打開,驗證等操作,就像真實用戶所做的一樣,從終端用戶的角度測試應用程序。
- 使用簡單,可使用Java,Python等多種語言編寫用例腳本。
自動化發送163郵件
import time
import datetime
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait # 等待頁面加載某些元素
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
def login(user, pwd):
""" 登錄163郵箱 """
# 由於可以掃碼登錄,而我們選擇用戶名和密碼登錄,所以,要點擊 密碼登錄
time.sleep(1)
wait.until(EC.presence_of_element_located((By.ID, 'switchAccountLogin'))).click()
# 進入iframe,因為有多個iframe,所以獲取的是數組,在分析頁面后,數組0索引的iframe是登陸的iframe
time.sleep(3)
iframe = driver.find_elements_by_tag_name('iframe')
# print(iframe)
'''
[
<selenium.webdriver.remote.webelement.WebElement (session="3f92dbd96e72746e7d27d64e6b412318", element="0.855888743369456-2")>,
<selenium.webdriver.remote.webelement.WebElement (session="3f92dbd96e72746e7d27d64e6b412318", element="0.855888743369456-3")>,
<selenium.webdriver.remote.webelement.WebElement (session="3f92dbd96e72746e7d27d64e6b412318", element="0.855888743369456-4")>,
<selenium.webdriver.remote.webelement.WebElement (session="3f92dbd96e72746e7d27d64e6b412318", element="0.855888743369456-5")>
]
'''
driver.switch_to.frame(iframe[0])
# 獲取用戶名和密碼標簽,並輸入對應的值
time.sleep(1)
driver.find_element_by_class_name('dlemail').send_keys(user)
time.sleep(2)
driver.find_element_by_class_name('dlpwd').send_keys(pwd)
time.sleep(2)
driver.find_element_by_id('dologin').click()
def send_mail():
""" 發送163郵件,需要傳遞163的用戶名和密碼,收件人和內容 """
try:
# 第1步,執行登陸
login(user, pwd)
# 第2步,點擊寫信按鈕
wait.until(EC.presence_of_element_located((By.ID, '_mail_component_24_24'))).click()
# driver.find_element_by_id('_mail_component_24_24').click()
# 第3步,獲取收件人,主題,內容框標簽,寫入內容
time.sleep(1)
# 3.1 填寫收件人
wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'nui-editableAddr-ipt'))).send_keys(addr) # 收件人
time.sleep(2)
# 3.2 填寫主題
title = driver.find_elements_by_class_name('nui-ipt-input')
# print(11111, title)
title[2].send_keys(theme) # 主題
# title.send_keys(theme) # 主題
# 3.3 進入content所在iframe,填寫內容
time.sleep(1)
content_iframe = driver.find_element_by_class_name('APP-editor-iframe')
driver.switch_to.frame(content_iframe)
# 雖然nui-scroll這個類名在整個網頁中有多個,但是這個iframe中只有一個,所以我們直接send_keys就行
nui_scroll = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'nui-scroll')))
# print(22222222, nui_scroll) # <selenium.webdriver.remote.webelement.WebElement (session="106a6f5778c14568827014435ddcfcd9", element="0.07847410617283446-1")>
nui_scroll.send_keys(content)
# 第4步,因為發送按鈕不在此時的iframe中,所以要先退出iframe,才能點擊發送按鈕
# 4.1 退出iframe
time.sleep(1)
driver.switch_to.default_content()
# 4.2 點擊發送按鈕
time.sleep(1)
# 這個發送按鈕的類名有多個,最好for循環一下,因為有坑,發送按鈕是第3個,前面還有兩個空標簽,但是前端檢查中看不到
driver.find_elements_by_class_name('nui-btn-text')[2].click()
finally:
# 關閉瀏覽器
time.sleep(3)
driver.quit()
# 截止2019-6-11,代碼無誤
if __name__ == '__main__':
from getpass import getpass
user = input("郵箱: ").strip() # 填寫你的163賬號
pwd = getpass('密碼: ') # 填寫你的163密碼
# 獲取driver
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
# driver.maximize_window()
# 發請求
driver.get('https://mail.163.com/')
addr = "1206180814@qq.com" # 收件人
theme = '我是你爸爸' # 主題
content = '天不生我李淳罡,劍道萬古如長夜 ————\n{}'.format(datetime.datetime.now()) # 發送內容
send_mail()