文章目录

  • 完整代码直接看结尾
  • 一、实验课程的性质、目的和任务
  • 二、实验环境
  • 三、实验内容
  • 四、实验步骤
    • 基于Selenium自动登QQ邮箱并发送邮件

完整代码直接看结尾

一、实验课程的性质、目的和任务

(1)了解Selenium+Python环境搭建及配置,能够了解基于Selenium自动化测试的基本原理;
(2)能够理解基于Selenium自动登QQ邮箱并发送邮件的过程,对软件自动化测试过程的原理有一定的理解,为今后从事web自动化测试奠定基础。

二、实验环境

(1)window10操作系统;
(2)python开发环境

三、实验内容

能够安装python,conda及selenium环境,执行简单的自动化web程序。

四、实验步骤

准备工作:安装python,conda及pycharm

(1)使用pycharm创建工程
①选择File—>New Project

② 创建工程项目
1、为工程指定路径;2、选择conda环境3、选择python版本;4、选择conda执行路径

(2)在pycharm下面选择Terminal 标签

(3)使用pip安装selenium : pip install selenium
(4)打开Chrome浏览器,查看浏览器版本。找到【帮助】下的【关于Google Chrome】

(5)根据对应的版本选择相匹配的webdriver,网址为:http://chromedriver.storage.googleapis.com/index.html;

可惜没有我要的Win64位driver啊,可以直接使用Win32的

然后运行conda env list 结果如下:

然后把chromedriver.exe考入到Selenium环境所对应的目录里。

(10)运行如下代码会在控制台打印出网页源代码。

from selenium import webdriverchrome_options = webdriver.ChromeOptions()
# 使用headless无界面浏览器模式
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')# 启动浏览器,获取网页源代码
browser = webdriver.Chrome(chrome_options=chrome_options)
mainUrl = "https://www.taobao.com/"
browser.get(mainUrl)
print(f"browser text ={browser.page_source}")
browser.quit()

控制台打印的网页源代码

基于Selenium自动登QQ邮箱并发送邮件

(1)浏览器打开QQ邮箱登录网址:QQ邮箱登录地址为:https://mail.qq.com/。选择账号密码登录

from selenium import webdriver
import time
QQEmail = webdriver.Chrome()
QQEmail.get('https://mail.qq.com/')

(2)元手动进入QQ邮箱登录网页,按下F12打开开发者工具,点击查看元素,选择元素:素定位,输入QQ账号和QQ密码

① 可以看到QQ账号输入框的id、name等属性,都是可以直接拿来定位的好选择。这里选择最通用的xpath方法来定位,id=‘u’,并用send事件输入QQ账号(也可以find_element_by_id(‘u’)来定位,代码更清晰,)

QQEmail.find_element_by_xpath('//*[@id="u"]').send_keys("QQ账号")

② QQ密码元素属性id=‘p’,同样定位方法

QQEmail.find_element_by_xpath('//*[@id="p"]').send_keys("密码")

③ 登录按钮元素属性id=‘login_button’,这里不需要发送信息,所以选择click点击事件

QQEmail.find_element_by_xpath('//*[@id="login_button"]').click()

原则上到此为止,运行pycharm应该是能够输入账号和密码,并登陆成功。但是事情没有那么简单,运行后发现,selenium报错,无法找到id为u的元素。原因在于控件输入框和密码框都在iframe框架内。在定位这些元素之前要转到这个frame。

④ 在定位元素之前,先输入如下代码:

# 定位login_frame
QQEmail.switch_to.frame("login_frame")

这样就切换到iframe了,再继续之前的元素定位,即可成功。这一步的完整代码为:

from selenium import webdriver
import time
QQEmail = webdriver.Chrome()
QQEmail.get('https://mail.qq.com/')# 定位login_frame
QQEmail.switch_to.frame("login_frame")
# 定位账号、密码,并输入
QQEmail.find_element_by_xpath('//*[@id="u"]').send_keys("QQ账号")
QQEmail.find_element_by_xpath('//*[@id="p"]').send_keys("密码")
# 定位登录按钮
QQEmail.find_element_by_xpath('//*[@id="login_button"]').click()

这个时候网页已经可以成功QQ邮箱。

额,如果QQ邮箱出现了需要手动输入验证码的情况,这一步并不能自动登录QQ邮箱,最简单的解决方案是让程序sleep一会儿,手动输入验证码

(3)元素定位,写信界面
①邮箱登录成功之后,来到写信界面,按照常规操作,需要先点击左上角写信按钮,展开具体写信界面。同样的方法,F12操作起来,查看写信按钮,元素定位为id=‘composebtn’,发送点击事件。

# 定位写信按钮
QQEmail.find_element_by_xpath('//*[@id="composebtn"]').click()

②这个时候调试程序,网页成功打开结果为selenium定位不到id为composebtn的元素。这个时候就暴露了在上一个环节中出现的问题,之前的代码将嵌套切换到了iframe的login_frame中,而此时的写信元素,不在iframe中,所以在定位之前,需要先离开这个嵌套,返回到主文档中:

QQEmail.switch_to.default_content()

这样嵌套就切换到主文档了,再次运行程序,发现还是报错。登陆之后的瞬间就去定位写信按钮,这个时候受网速、PC的客观影响,会定位不到元素。只需要加一个sleep一秒,即可完美解决。

#离开login_frame
QQEmail.switch_to.default_content()
#等待一秒
time.sleep(1)
# 定位写信按钮
QQEmail.find_element_by_xpath('//*[@id="composebtn"]').click()

这样即可定位到写信按钮,进入到了发邮件的步骤。
(4)元素定位,邮件发送

邮件内容编辑有四个部分,收件人、主题、正文,以及最后点击发送按钮。通过之前踩的坑,到了这一步,我对iframe嵌套变得格外小心,准备定位的每个元素都去观察是否被iframe嵌套。果不其然,“收件人”、“主题”和“发送”被主文档下的mainFrame嵌套了,而“正文”又被mainFrame的子frame嵌套了。
这一步的逻辑为:
①先切换到mainFrame,
②分别定位 收件人 和 主题 ,调用发送事件
③继续切换到子frame
④定位正文,调用发送事件
⑤从子frame,返回到它的父frame,也即是mainFrame中
⑥定位发送按钮,调用点击事件

(5)定位收件人的时候,发现定位到的元素,还有子div,经过模拟,发现只有第二个子div才是真正能够定位到收件人的元素,于是先定位id=‘toAreaCtrl’,然后选择第二个div中的input作为定位。具体xpath定位内容为:“//*[@id=‘toAreaCtrl’]/div[2]/input”

(6)定位正文时,从mainFrame切换到iframe,发现iframe的id和name是动态的一串数字,但是switch_to.frame只支持固定id或者name。先用iframe的class进行xpath定位,然后把传给switch_to.frame来切换。具体为:

QQEmail.switch_to.frame(QQEmail.find_element_by_xpath('//*[@class="qmEditorIfrmEditArea"]'))

最后代码为

# 切换到mainFrame
QQEmail.switch_to.frame('mainFrame')
time.sleep(1)
# 定位收件人,并输入
QQEmail.find_element_by_xpath("//*[@id='toAreaCtrl']/div[2]/input").send_keys("收件人@qq.com")
# 定位主题,并输入
QQEmail.find_element_by_xpath('//*[@id="subject"]').send_keys("来自***的邮件")
# 定位邮件正文,先进入到iframe
QQEmail.switch_to.frame(QQEmail.find_element_by_xpath('//*[@class="qmEditorIfrmEditArea"]'))
# 必须先点击正文,再send_keys
QQEmail.find_element_by_xpath('/html/body').click()
QQEmail.find_element_by_xpath('/html/body').send_keys("Hello World","\n***")
# 返回到mainframe
QQEmail.switch_to.parent_frame()
# 定位发送按钮
QQEmail.find_element_by_xpath('//*[@name="sendbtn"]').click()

基于Selenium自动登QQ邮箱并发送邮件完整代码

from selenium import webdriver
import time
QQEmail = webdriver.Chrome()
QQEmail.get('https://mail.qq.com')
# 定位login_frame
QQEmail.switch_to.frame("login_frame")
# 定位账号、密码,并输入
QQEmail.find_element_by_xpath('//*[@id="u"]').send_keys("账号")
QQEmail.find_element_by_xpath('//*[@id="p"]').send_keys("密码")
# 定位登录按钮
QQEmail.find_element_by_xpath('//*[@id="login_button"]').click()# 离开login_frame
QQEmail.switch_to.default_content()
# 等待一秒
time.sleep(1) # 如果需要手动输入验证码,就把时间设置长一些再定位到写信按钮
# 定位写信按钮
QQEmail.find_element_by_xpath('//*[@id="composebtn"]').click()
# 切换到mainFrame
QQEmail.switch_to.frame('mainFrame')
time.sleep(1)
# 定位收件人,并输入
QQEmail.find_element_by_xpath("//*[@id='toAreaCtrl']/div[2]/input").send_keys("收件人邮箱")
# 定位主题,并输入
QQEmail.find_element_by_xpath('//*[@id="subject"]').send_keys("来自***的邮件")
# 定位邮件正文,先进入到iframe
QQEmail.switch_to.frame(QQEmail.find_element_by_xpath('//*[@class="qmEditorIfrmEditArea"]'))
# 必须先点击正文,再send_keys
QQEmail.find_element_by_xpath('/html/body').click()
QQEmail.find_element_by_xpath('/html/body').send_keys("Hello World","\n***")
# 返回到mainframe
QQEmail.switch_to.parent_frame()
# 定位发送按钮
QQEmail.find_element_by_xpath('//*[@name="sendbtn"]').click()

【软件质量保证与测试】实验一、基于Selenium+Python的自动化测试相关推荐

  1. 软件质量保证与测试实验(实验三.逻辑覆盖测试用例设计)

    软件质量保证与测试.实验三.逻辑覆盖测试用例设计 0 目录 1 逻辑覆盖测试用例设计 1.1 逻辑覆盖测试用例设计 1.1.1 实验目的 1.1.2 实验预习 1.1.3 实验内容及要求 1.1.4 ...

  2. 软件质量保证与测试 实验一:白盒测试用例设计 实验报告,白盒测试和黑盒测试实验报告.doc...

    文档介绍: 白盒测试和黑盒测试实验报告软件质量保证与测试实验指导计算机工程学院测试环境配置settingJunit(1)startEclipseSelectwindows-preferences-ja ...

  3. 软件质量保证与测试 实验一:白盒测试用例设计 实验报告,白盒测试和黑盒测试实验报告...

    白盒测试和黑盒测试实验报告 (24页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 软件质量保证与测试实验指导计算机工程学院测试环境配置1 ...

  4. 软件质量保证与测试 实验一:白盒测试用例设计 实验报告,软件质量保证与测试实验报告...

    <软件质量保证与测试>实验报告 实验一 白盒测试技术 (实验日期:12(2)11(3)班9月22日-9月29日) (实验日期:12(1)班9月23日-9月30日) 一.实验目的 1. 熟练 ...

  5. 软件质量保证与测试 实验十一:AutoIt的使用

    目录 实验概述 实验内容 1. 下载安装AutoIT. 2. 测试win系统自带计算器程序, 2+4=6,是否正确? 写出Script.(小提示:使用WinGetText获得输出) 3.测试win系统 ...

  6. 软件质量保证与测试笔记——江湖救急版

    软件质量保证与测试笔记--江湖救急版 Powered by DZY 以下部分图片来源于老师课件,仅供学习交流使用,侵权致删! Ch1 软件质量与测试概念 软件质量的定义 软件质量是"反映实体 ...

  7. 软件质量保证与测试技术习题

    软件质量保证与测试技术习题 第一章 引论 第二章 软件质量与软件缺陷 第三章 软件测试基础 第4章 软件测试的方法 第五章单元测试.第六章集成测试作业 第七章系统测试作业 第八章验收测试作业 第一章 ...

  8. 软件质量保证与测试文档怎么写,软件质量保证与测试整理版.pdf

    软件质量保证与测试整理版.pdf 还剩 16页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: 把不可能变成可能才 ...

  9. 山东大学软件质量保证与测试技术复习纲要

    考纲 目录:https://blog.csdn.net/dkbnull/article/details/87933295 软件质量保证与测试技术复习提纲 1.3  1.5   2.1 2.3 2.5 ...

最新文章

  1. html5主要是针对哪方面行优化,前端知识点总结(HTML篇)
  2. AI Studio 对于波士顿房价的线性回归
  3. 微信8.0.6正式发布,新增了7大变化,个个实用~
  4. Pig的安装和简单使用
  5. 数据库脱机和分离的区别
  6. 不属于前后端分离的Vue+Django的例子
  7. client copy sap论坛上看到的
  8. python画国际象棋_python图形工具turtle绘制国际象棋棋盘
  9. link标签引入.css文件(目的):适配不同屏幕
  10. 自动生成代码:TensorFlow官方工具TF-Coder已开源
  11. python 当前时间的前一天_Python与Stata的数据交互
  12. 周期性行业是什么意思_什么样的股票适合长期持有?股票知识学习
  13. P3C-PMD自定义规则实战
  14. jquery日历插件 途牛_js jquery 实现 排班,轮班,日历,日程。使用fullcalendar 插件...
  15. erlang游戏服务器
  16. Android手机通过USB数据线共享Linux电脑网络
  17. 【Vue开发实战课后题】子组件为何不可以修改父组件传递的props?
  18. marvelous designer 10安装使用教程(附快捷键)
  19. w ndows10QQ远程,Win10提示“QQ远程系统权限原因,暂时无法操作”的解决方法
  20. 强烈推荐一位改变我命运的程序员大佬!当作礼物送给你!

热门文章

  1. 《A Transformer-based joint-encoding for Emotion Recognition andSentiment Analysis》论文翻译
  2. PDF文章复制到翻译软件去空格问题(仅分享)
  3. 数字IC后端实现问答(摘选自知识星球本周问答)
  4. mysql按月统计最近一年,半年数量,本月每一天
  5. append,extend和insert的区别
  6. OpenCASCADE入门指南
  7. 怎么把aac转化为mp3,aac转mp3的3个方法
  8. JavaScript对象数组归类处理
  9. 【SCF CLI实践】腾讯云serverless + 企业微信群机器人,轻松解决告警通知问题
  10. c语言飞机订票信息查询,C语言飞机订票系统