Selenium+webdriver自动化登陆QQ邮箱并发送邮件
1.关于selenium
(1)测试与浏览器的兼容性:测试应用程序能否兼容工作在不同浏览器和操作系统之上。
(2)测试系统功能:录制用例自动生成测试脚本,用于回归功能测试或者系统用例说明。
简而言之,Selenium 就是一款可以录制用户操作, 帮助Web测试人员简化重复劳动的工具。
2.selenium安装
win+r,进入cmd,
然后输入pip install selenium,等一会就安装好了。
3.webdriver原理
WebDriver是按照Server-Client的模式设计的。
Server就是Remote Server, 可以是任意的浏览器。当我们的脚本启动浏览器后,该浏览器就是Remote Server,她的职责就是等待Client发送请求并做出响应。
Client端简单说就是我们写的测试脚本。脚本中的一些行为比如打开浏览器,跳转到指定的URL等操作就是以http请求的方式发送给被测试的浏览器,也就是Remote Server. Remote Server接受请求,执行相应操作,并在Response中返回执行状态、返回值等信息。
4.下载安装webdriver
Webdriver下载路径:
http:// chromedriver. storage. googleapis. com/ index. html,用于驱动打开Chrome;
geckodriver下载路径: https:// github. com/ moz illa/ geckodriver/releeases,用于驱动打开Firefox;
下载后放在python. exe相同目录下( 我用的是谷歌浏览器,所以就下载的chromedriver) :
5.测试是否可用
出现了下面的结果,说明我们做好了准备工作,可以开始自动化了。
6.要做到自动化,我们就需要模仿鼠标和键盘的操作,我这里只用到了一些简单的操作:
7.自动化在操作之前,要找到进行操作的位子,我可以根据网页源代码的标签去找(标签的属性最好是唯一的)。
find_element _by_ id(a) #定位id=‘a’的地方
find_element_by_ name (a) #定位name=‘a'的地方
find_element_by_ class_name (a) #定位class=‘a’的地方
find_element_ by_ xpath()
find_element_ by_ css_ selector()
find_element_ by_ tag_ name ()
find_element_ by_ link_text() #定位文本链接的
find_element_by_ partial_link_text() #和上面的一样,但我们可只截取链接的一部分
8.运行程序的全代码
from selenium import webdriver import time first_url = 'http://www.mail.qq.com' driver = webdriver.Chrome() driver.get(first_url) driver.implicitly_wait(3) driver.maximize_window() #切换到iframe time.sleep(3) driver.switch_to.frame(driver.find_element_by_id('login_frame')) time.sleep(3) #点击头像进行登录 driver.find_element_by_id('img_out_1147451366').click() time.sleep(2) #进入收件箱 driver.find_element_by_id('folder_1').click() time.sleep(2) #点击写信 driver.find_element_by_id('composebtn').click() time.sleep(3) #切换到iframe driver.switch_to.frame(driver.find_element_by_id('mainFrame')) #输入收件人 driver.find_element_by_xpath("//*[@id='toAreaCtrl']/div[2]/input").send_keys('949709967@qq.com') time.sleep(2) #添加附件 driver.find_element_by_name('UploadFile').send_keys(r'C:\Users\11474\Desktop\2019年下半年英语四级笔试准考证(王龙).zip') #输入正文,先切入到iframe driver.switch_to_frame(driver.find_element_by_class_name('qmEditorIfrmEditArea')) time.sleep(3) #输入正文 driver.find_element_by_xpath("ml/body").send_keys('小哥哥,爱你哟') time.sleep(3) #切出iframe driver.switch_to_default_content() #再切入到‘发送’按钮的iframe driver.switch_to.frame(driver.find_element_by_id('mainFrame')) time.sleep(3) #邮件发送 driver.find_element_by_name('sendbtn').click()
运行结果要录屏就不发了。
------------恢复内容结束------------