Pyhon# Selenium## 分享## 线性测试
第一次写博客。。。。。格式可能不太美观,以后逐步改进!
主要思路:利用selenium的webdriver登陆QQ邮箱,实现邮件相关信息的填写
和邮件的发送,最后判断发送结果并退出邮箱。
强调:方式一的登陆方式属于填写相应信息登陆,首先注意元素定位需要转换框架,不然有些元素定位不到,还有在qq邮箱的登陆界面可能偶而会出现拼图验证码,本方式省略直接破解验证码登陆,转而利用简单的sleep间歇时间来手动滑动验证码。
需要用到的库:selenium,time
需要用到的驱动:对应Chrome版本的驱动,并放在python安装目录下
加粗文本
下面利用两种方式登陆并发送邮件
##方式一:利用selenium登陆qq邮箱
```#自动化线性测试
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import sleep
"""登录qq邮箱网址"""
#1 打开qq邮箱网址
driver = webdriver.Chrome()
driver.maximize_window() #最大化浏览器窗口
url = 'https://mail.qq.com/'
driver.implicitly_wait(3) #隐式等待
driver.get(url)
#2 切换窗口并输入账号密码信息
driver.switch_to.frame(driver.find_element_by_id('login_frame'))
user = '######' #这里字符串内填写登陆账号
password = '####' #这里字符串内填写qq密码
driver.find_element_by_xpath('//*[@id="u"]').send_keys(user)
driver.find_element_by_xpath('//*[@id="p"]').send_keys(password)
#假如出现滑块拼图,暂时手动代替(利用sleep)登陆操作
try:
driver.find_element_by_xpath('//*[@id="login_button"]').click()
except NoSuchElementException:
sleep(4)
#更新窗口句柄,保险起见
for handle in driver.window_handles:
driver.switch_to.window(handle)
if 'QQ邮箱' in driver.title:
print('已经进入QQ邮箱')
break
#给予js加载缓冲的时间
sleep(6)
"""写信操作"""
#点击写信
driver.find_element_by_xpath('//*[@id="composebtn_td"]').click()
sleep(2)
#再次更新句柄
for handle in driver.window_handles:
driver.switch_to.window(handle)
sleep(2)
#切入框架
driver.switch_to.frame(driver.find_element_by_id('mainFrame'))
sleep(2)
#填写收件人,主题
receiver = '######' #字符串内填写相应的收件人qq邮箱(即qq号码)
driver.find_element_by_xpath("//*[@id='toAreaCtrl']/div[2]/input").send_keys(receiver)
title = '测试邮件' #填写邮件主题
driver.find_element_by_xpath('//*[@id="subject"]').send_keys(title)
sleep(3)
#添加附件,注意文件路径前面添加r
driver.find_element_by_name('UploadFile').send_keys(r'D:\python\debug.log')
#由于input标签,文件上传可以用send_keys加路径来实现,括号(r' 路径')的形式
#输入正文
driver.switch_to.frame(driver.find_element_by_class_name('qmEditorIfrmEditArea'))
sleep(2)
#下面send_keys字符串内输入正文内容
driver.find_element_by_xpath("/html/body").send_keys('####')
sleep(2)
#切出框架再切入框架点击发送
driver.switch_to.default_content()
sleep(2)
driver.switch_to.frame(driver.find_element_by_id('mainFrame'))
driver.find_element_by_xpath('//*[@id="toolbar"]/div/a[1]').click()
sleep(5)
#验证是否发送成功
try: #由于发送成功会出现相关字眼在代码中,故可利用此点进行验证结果
assert '您的邮件已发送' in driver.page_source
except AssertionError:
print("邮件发送失败")
else:
print("邮件成功发送")
sleep(2)
#返回主框架,并退出QQ邮箱
driver.switch_to.default_content()
driver.find_element_by_xpath('//*[@id="SetInfo"]/div[1]/a[3]').click()
print("已退出QQ邮箱,欢迎下次光临")
print("正在关闭浏览器")
sleep(3)
driver.quit() #关闭浏览器
## 方式二:利用cookies信息登陆,分为两部分讲解
第一部分:获取cookies登陆信息,可利用上面方式一登陆一次打印获取cookies信息
代码如下:
```python
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import sleep
"""登录qq邮箱网址"""
#1 打开qq邮箱网址
driver = webdriver.Chrome()
driver.maximize_window() #最大化浏览器窗口
url = 'https://mail.qq.com/'
driver.implicitly_wait(3) #隐式等待
driver.get(url)
#2 切换窗口并输入账号密码信息
driver.switch_to.frame(driver.find_element_by_id('login_frame'))
user = '######' #这里字符串内填写登陆账号
password = '####' #这里字符串内填写qq密码
driver.find_element_by_xpath('//*[@id="u"]').send_keys(user)
driver.find_element_by_xpath('//*[@id="p"]').send_keys(password)
#假如出现滑块拼图,暂时手动代替(利用sleep)登陆操作
try:
driver.find_element_by_xpath('//*[@id="login_button"]').click()
except NoSuchElementException:
sleep(4)
#更新窗口句柄,保险起见
for handle in driver.window_handles:
driver.switch_to.window(handle)
if 'QQ邮箱' in driver.title:
print('已经进入QQ邮箱')
break
#给予js加载缓冲的时间
sleep(6)
#获取cookies信息并打印
cookies = driver.get_cookies()
print(cookies)
"""第二部分:利用前面获取到的cookies添加到页面再刷新实现登陆"""
代码如下:
#cookie登陆qq邮箱尝试
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import sleep
driver = webdriver.Chrome()
#清除之前的所有cookies
driver.delete_all_cookies()
#确定cookies信息
cookies = ['']# 前面获取到的cookies信息,复制即可
driver.set_page_load_timeout(20) #设置页面加载时间
driver.set_script_timeout(20)
#登陆到未登录的页面
try:
driver.maximize_window()
driver.get('https://mail.qq.com/')
except:
driver.execute_script("window.stop()") #加载js
sleep(10)
#添加cookie到未登录的页面
for cookie in cookies:
driver.add_cookie(cookie)
#刷新页面看看
driver.refresh()
#更新窗口句柄并判断是否成功进入邮箱
for handle in driver.window_handles:
driver.switch_to.window(handle)
if 'QQ邮箱' in driver.title:
print("您已进入QQ邮箱")
break
#给予缓冲时间
sleep(3)
# 点击写信
driver.find_element_by_xpath('//*[@id="composebtn_td"]').click()
sleep(2)
# 再次更新句柄
for handle in driver.window_handles:
driver.switch_to.window(handle)
sleep(2)
# 切入框架
driver.switch_to.frame(driver.find_element_by_id('mainFrame'))
sleep(2)
# 填写收件人,主题
receiver = '#####' #输入收件人qq号码
driver.find_element_by_xpath("//*[@id='toAreaCtrl']/div[2]/input").send_keys(receiver)
title = '主题'#这里输入主题
driver.find_element_by_xpath('//*[@id="subject"]').send_keys(title)
sleep(3)
# 添加附件,注意文件路径前面添加r
driver.find_element_by_name('UploadFile').send_keys(r'D:\python\debug.log') #input标签,send-keys()添加路径上传附件
# 输入正文
driver.switch_to.frame(driver.find_element_by_class_name('qmEditorIfrmEditArea'))
sleep(2)
driver.find_element_by_xpath("/html/body").send_keys('###') #输入正文
sleep(2)
# 切出框架再切入框架点击发送
driver.switch_to.default_content()
sleep(2)
driver.switch_to.frame(driver.find_element_by_id('mainFrame'))
driver.find_element_by_xpath('//*[@id="toolbar"]/div/a[1]').click()
sleep(5)
# 验证是否发送成功
try:
assert '您的邮件已发送' in driver.page_source
except AssertionError:
print("邮件发送失败")
else:
print("邮件成功发送")
sleep(2)
# 返回主框架,并退出QQ邮箱
driver.switch_to.default_content()
driver.find_element_by_xpath('//*[@id="SetInfo"]/div[1]/a[3]').click()
print("已退出QQ邮箱,欢迎下次光临")
print('正在退出浏览器')
sleep(3)
driver.quit()