Selenium 自动化测试实战
郭宏志
享学志成科技创始人兼 CEO
18891 人已学习
新⼈⾸单¥68
课程目录
已完结/共 69 讲
Selenium 自动化测试实战
登录|注册
留言
23
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 08 | 实现元素定位:掌握Selenium八大定位方法
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 内容综述
03 | 聊聊Web自动化测试:黑盒、白盒、α测试、β测试、冒烟测试、回归测试
04 | Selenium三剑客:WebDriver、IDE、Grid一网打尽
05 | Selenium开发环境搭建
06 | 下载安装浏览器驱动:教你解决最麻烦的版本匹配问题
07 | 第一个Selenium测试:Selenium测试流程、源码分析
08 | 实现元素定位:掌握Selenium八大定位方法
09 | 通过打车生活案例,深入剖析WebDriver运行原理
10 | 掌握WebDriver核心方法和属性的使用
11 | 掌握WebElement核心方法和属性的使用
12 | form表单:熟练掌握form表单操作步骤
13 | 掌握checkbox和radiobutton的定位技巧
14 | 下拉列表:熟练使用Select类,来实现下拉列表定位
15 | 弹框处理:掌握alert、confirm、prompt三种弹出的用法
16 | Selenium三种等待方式:剖析原理、用法和应用场景
17 | Selenium等待条件:掌握17种元素等待条件
18 | 掌握鼠标单击、双击、右击,键盘输入、键盘组合键的应用
19 | 熟练执行JavaScript的方法和技巧,掌握JavaScript操作滚动条
20 | Selenium屏幕截图:实现屏幕截屏、按照日期时间格式保存图片
21 | 掌握frame、iframe定位,熟练frame的切入和切出
22 | 下载安装Selenium IDE:下载安装Chrome、Firefox插件IDE
23 | 熟练Selenium IDE菜单栏、工具类、命令窗口的使用
24 | Selenium IDE实现录制和回放及脚本导出
25 | 项目环境搭建:安装JDK、MySQL、Tomcat和测试系统
26 | 需求分析和用例设计:深度挖掘需求,掌握测试用例设计范式
27 | 项目架构设计:掌握分层设计思想,合理设计目录和包结构
28 | 解决验证码问题-方案一:使用pytesseract和Pillow实现验证码识别
29 | 解决验证码问题-方案二:通过第三方AI库识别验证码
30 | 实现工具类:设计获得验证码、随机字符串生成、cookie操作工具类
31 | 完成用户注册测试用例:解决验证码、等待弹框等复杂内容
32 | 完成用户登录测试用例:实现登录成功和失败测试
33 | 完成管理员登录测试用例:完成验证码正确和错误测试用例
34 | 完成文章分类测试用例:解决测试用例依赖问题
35 | 完成添加、删除文章测试用例
36 | unittest简介:测试用例、测试套件、测试运行器、测试加载器
37 | unittest中的方法:掌握各种setup、teardown和断言方法
38 | 测试用例、测试套件和测试加载器:掌握加载测试用例的四种方法
39 | 使用unittest重构测试用例:掌握使用unittest模块的方法和技巧
40 | 为项目添加测试报告:使用第三方模块实现测试报告
41 | pytest框架简介:pytest安装、用例编写规则、执行用例
42 | pytest标记:查找测试策略、标记测试函数
43 | pytest参数化处理:使用参数化装饰器、解析列表、元组、字典等数据
44 | pytest Fixture:使用fixture实现用例之间的调用
45 | pytest setup 和 teardown
46 | pytest allure生成测试报告
47 | 使用pytest重构项目:实现用例依赖、测试报告、数据参数化
48 | logging模块简介:日志的作用、等级和常用函数
49 | logging日志格式输出:日志发生的时间、文件、模块、行号等信息格式输出
50 | logging模块四大组件:Logger、Handler、Formatter、Filter的用法
51 | 为项目添加日志:将日志应用到项目
52 | 使用csv模块读取CSV文件,使用pytest参数化实现DDT
53 | 使用json模块读取json文件,使用pytest参数化实现DDT
54 | 使用xlrd模块读取excel文件,使用pytest参数化实现DDT
55 | Selenium读取数据库数据:将数据保存到数据库,实现数据驱动的测试
56 | Selenium DDT:使用DDT模块实现数据驱动的测试
57 | 使用DDT思想重构项目:使用数据库保存数据,将数据驱动思想应用到项目
58 | POM设计模式简介:理解页面-对象-模型设计模式,实现代码的松耦合
59 | 设计BasePage类:设计基类,提高项目的代码重用性
60 | 设计项目页面对应的PO类:使用POM设计模式设计PO类
61 | 设计项目测试用例:将POM设计模式应用到项目
62 | Selenium Grid下载安装:配置Java运行环境,下载安装Selenium Grid
63 | Selenium注册node节点
64 | 使用Selenium执行远程测试
65 | Jenkins环境搭建:下载安装Jenkins
66 | 在Jenkins中运行项目
67 | 邮件通知:实现邮件通知功能
68 | 定时运行项目,实现真正的自动化测试
69 | 结课测试&结束语
本节摘要

课件和 Demo 地址
https://gitee.com/geektime-geekbang/Selenium

如果你无法从 GitHub 正常下载课件及 Demo,请打开下方链接进行下载:
https://gitee.com/geektime-geekbang/Selenium

登录 后留言

全部留言(23)

  • 最新
  • 精选
陈欣彤
class TestCase(object): def __init__(self): self.driver = webdriver.Chrome() self.driver.get('http://www.baidu.com') self.driver.maximize_window() sleep(3) def test_id(self): element = self.driver.find_element(By.ID, 'kw').send_keys('yuanshen') sleep(3) self.driver.find_element(By.ID, 'su').click() sleep(10) self.driver.quit() if __name__ == '__main__': case = TestCase() case.test_id() 运行后为什么会打开两个百度窗口

作者回复: 在代码中,创建了一个 TestCase 类,该类在初始化方法 `__init__` 中创建了一个 Chrome 驱动器对象,打开了百度网站,并最大化窗口。接着,在 `test_id` 方法中,通过该驱动器对象找到搜索框,输入搜索词并点击搜索按钮,最后等待 10 秒后关闭浏览器。 在主程序中,首先创建了一个 TestCase 的实例,然后调用该实例的 `test_id` 方法。 由于在 `__init__` 方法中已经打开了百度网站并最大化了窗口,因此在调用 `test_id` 方法时,又会打开一个新的百度窗口。因此,程序最终会打开两个百度窗口。 为了解决这个问题,可以将打开网站和最大化窗口的代码从 `__init__` 方法中移动到 `test_id` 方法中,或者在初始化方法中加入判断,如果浏览器已经打开,则不再打开。例如: ``` class TestCase(object): def __init__(self): self.driver = None def test_id(self): if not self.driver: self.driver = webdriver.Chrome() self.driver.get('http://www.baidu.com') self.driver.maximize_window() sleep(3) element = self.driver.find_element(By.ID, 'kw').send_keys('yuanshen') sleep(3) self.driver.find_element(By.ID, 'su').click() sleep(10) self.driver.quit() if __name__ == '__main__': case = TestCase() case.test_id() ``` 在修改后的代码中,初始化方法只初始化了一个空的驱动器对象,而在测试方法中,通过判断驱动器对象是否为空来确定是否需要打开浏览器。这样,即使在初始化方法中打开了浏览器,由于在测试方法中判断浏览器对象不为空,因此不会再次打开浏览器

2022-11-17
海东
python安装跟你一样的版本,为什么没有find-element-by-id 这个方法

作者回复: 这个根python没有关系是selenium里面的api 查看一下selenium

2022-08-22
2
Wjw_nn
老师,为什么我的编辑器不能自动联想呢,没有设置低电量,用的3.10的版本

作者回复: 你用的啥编辑器 pycharm吗?还是其他的 每个编辑器都不太一样

2022-07-29
婷婷
老师我这边会一直校验图片的要怎么操作

作者回复: 可以把图片校验跳过

2022-06-23
在路上
from selenium import webdriver driver = webdriver.chrome() driver.maximize_window() 我的Pycharm环境 driver. 输入 m 没有自动提示出 maximize_window()这个方法

作者回复: 看看是否有语法错误 这种情况一般就是语法错误

2021-12-08
Geek_cde08d
老师,你好! 听完您第8课的讲解之后,我对最后一个知识点还有一点不太理解的地方。我不太清楚重新定义一个方法get_element(driver, *loc)有什么好处? from selenium import webdriver from selenium.webdriver.common.by import By def get_element(driver, *loc): e = driver.find_element(*loc) return e if __name__ == '__main__': driver = webdriver.Chrome() driver.get('http://baidu.com') loc = (By.ID, 'kw') loc2 = (By.ID, 'su') get_element(driver, *loc).send_keys('selenium') get_element(driver, *loc2).click() 如果不额外定义一个方法,我在if __name__ == '__main__':代码里,直接使用driver.find_element(By.ID, 'kw').send_keys('selenium')的话,感觉代码会更少些。 from selenium import webdriver from selenium.webdriver.common.by import By if __name__ == '__main__': driver = webdriver.Chrome() driver.get('http://baidu.com') driver.find_element(By.ID, 'kw').send_keys('selenium') driver.find_element(By.ID, 'su').click() 老师能帮忙解答一下吗?谢谢!

作者回复: 这样代码更具有通用性

2021-06-25
蓝丶鸢尾
老师,我元素定位时候报错。不知道是啥错误,能帮我看看嘛 element = self.driver.find_element_by_id('kw') AttributeError: 'TestCase' object has no attribute 'driver'

作者回复: driver 没有正确实例化 或者不在这个作用域

2021-04-24
2
Traceback (most recent call last): File "E:/tools/PyCharm/PycharmProjects/FristProjects/demo01.py", line 35, in <module> case = TestCase() File "E:/tools/PyCharm/PycharmProjects/FristProjects/demo01.py", line 17, in __init__ self.driver = webdriver.Chrome() File "E:\tools\py3.7\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 81, in __init__ desired_capabilities=desired_capabilities) File "E:\tools\py3.7\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 157, in __init__ self.start_session(capabilities, browser_profile) File "E:\tools\py3.7\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 252, in start_session response = self.execute(Command.NEW_SESSION, parameters) File "E:\tools\py3.7\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute self.error_handler.check_response(response) File "E:\tools\py3.7\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 87 Current browser version is 89.0.4389.90 with binary path C:\Program Files (x86)\Google\Chrome\Application\chrome.exe Process finished with exit code 1

作者回复: 浏览器版本和驱动版本不一致

2021-03-20
Mnemosyne
老师,使用linktext元素定位之后就反复出现下面这个错误: ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。

作者回复: 这个是联网问题

2021-03-04
彬(^_^)
def get_element(driver, *loc): e = driver.find_element(*loc) return e 想问下自己定义一个类, driver.find_element中为什么不用加value就能够执行,value不是必填的参数吗

作者回复: *loc可以是多个参数

2021-01-28
收起评论