Selenium 自动化测试实战
郭宏志
享学志成科技创始人兼 CEO
18891 人已学习
新⼈⾸单¥68
课程目录
已完结/共 69 讲
Selenium 自动化测试实战
登录|注册
留言
11
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 17 | Selenium等待条件:掌握17种元素等待条件
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 | 结课测试&结束语
本节摘要
登录 后留言

全部留言(11)

  • 最新
  • 精选
Geek_c92888
有判断网络请求的方法么?比如某个http的返回结果是否200,是否处于pending状态?

作者回复: 是的,Selenium可以通过`execute_script()`方法来执行JavaScript代码,以获取页面中的网络请求信息,例如HTTP返回状态和pending状态等。 下面是一个示例代码,它使用Selenium和JavaScript来获取页面中所有网络请求的相关信息,并将这些信息打印出来: ``` import time from selenium import webdriver driver = webdriver.Chrome() driver.get("https://www.example.com") # Wait for the page to load time.sleep(5) # Execute JavaScript to get all network requests requests = driver.execute_script(""" var performance = window.performance || window.mozPerformance || window.msPerformance || window.webkitPerformance || {}; var network = performance.getEntries() || []; return network; """) # Print the details of each request for request in requests: print("Request URL:", request["name"]) print("Response Status:", request["responseStart"]) print("Pending Time:", request["responseStart"] - request["requestStart"]) print("Response Time:", request["responseEnd"] - request["responseStart"]) print("----------------------") ``` 在上面的示例中,`execute_script()`方法执行了一段JavaScript代码,通过`performance.getEntries()`方法获取了页面中所有的网络请求信息,然后遍历每个请求并输出了相关信息,包括请求URL、返回状态、pending时间和响应时间等。

2022-04-05
1
Geek_197376
老师,源码里没有html代码啊

作者回复: 可以自己写一个哈 比较简单

2021-12-22
邓冬林
老师 from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium import webdriver from time import sleep class Test_from(object): def __init__(self): self.driver =webdriver.Chrome() self.driver.maximize_window() self.driver.get('http://sahitest.com/demo/formTest.htm') # self.driver.implicitly_wait(30)隐式等待 def test01(self): # sleep(3) # self.driver.switch_to.alert()accept()报错'Alert' object is not callable # 可以改为self.driver.switch_to.alert.accept() # self.driver.switch_to.alert.accept() # sleep(1) self.driver.WebDriverWait(self.driver,10,0.5).until(EC.alert_is_present()) alert= self.driver.switch_to.alert() print(alert.text) alert.accept() self.driver.quit() if __name__ == '__main__': case =Test_from() case.test01() 脚本里面有使用WebDriverWait,但是WebDriverWait导入包是置灰的 运行提示AttributeError: 'WebDriver' object has no attribute 'WebDriverWait'

作者回复: 看看版本一致吗

2021-03-07
2
ning
老师,WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(locator)) 元素获取已使用显示等待并封装在通用的方法中,但脚本有时运行是正常的,有时还是会报“element not interactable”错误,这个怎么解决

作者回复: 加异常处理

2020-12-19
Geek_fe531f
关于获取不可见的dom,是说dom树立边但是存在哪个属性会判断不可见,前端对于不可见的方式应该很多,这个方法使用与什么样的页面不可以的dom呢

作者回复: 可以js

2020-11-09
Geek_fe531f
关于获取加载页面是否完成状态,有没有浏览器的一些方法判断,比如控制台中Windows挂载的方法,我看显示等待的源码写的相对简单里边原理还是等待轮询

作者回复: se中提供的就是轮询

2020-11-09
西西
老师 你的项目源码包是README.md这个文件吗?我用notpad++打开里面只有一行字:# Selenium 视频课程课件及代码

作者回复: 不是这个是一个压缩包

2020-08-02
2
real-t
希望老师把 html 源码也放出来

作者回复: 项目源码包里有哈

2020-07-30
4
Geek_c63006
此下的代码为什么还需要添加sleep? class TestCase(object): def __init__(self): self.driver = webdriver.Chrome() self.driver.get('xxx') def test_wait(self): wait = WebDriverWait(self.driver, 11) wait.until(EC.title_is('Product Login')) wait.until(EC.visibility_of_any_elements_located((By.CLASS_NAME,'theme-form-row'))) self.driver.find_element_by_class_name('theme-form-row').click() wait.until(EC.visibility_of_any_elements_located((By.ID,'login'))) sleep(1)---------疑虑(此处若不加sleep,程序不会执行下面的输入用户名和密码,且程序返回0) self.driver.find_element_by_id('login').send_keys('xxxxx') self.driver.find_element_by_id('password').send_keys('xxxx') self.driver.find_element_by_class_name('dex-btn.theme-btn--primary').click() if __name__ == '__main__': case = TestCase() case.test_wait() 麻烦老师答疑下

作者回复: 要等待 login 和password 出现 这两个locator可能没写对

2020-07-25
2
Geek_197376
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <script> function f() { window.setTimeout("populate()", 2000) } function populate() { document.f1.t1.value = "populated" document.getElementById("id1").innerHTML = "<div id='id2'>id2<div>" } </script> <form name="f1"> <input type="text" name="t1"> <input type="button" value="Click me" onclick="f()"> <div id="id1"> id1 </div> </form> </body> </html>
2021-12-22
1
1
收起评论