第1章 如何加快测试速度
1.1 使开发人员易于运行测试
1.2 使用Apache Maven构建测试项目
1.3 并行执行测试
1.4 使用TestNG进行并行测试
1.5 不存在银弹
1.6 多浏览器支持
1.7 自动下载WebDriver二进制文件
1.8 后台模式
1.9 总结
第2章 如何正确处理失败的测试
2.1 测试代码的位置
2.2 测试是一种实时文档
2.3 测试的可靠性
2.3.1 孤立的自动化团队
2.3.2 时好时坏的测试
2.4 增强测试的可靠性
2.4.1 Git
2.4.2 Subversion
2.5 关键在于持续集成
2.5.1 设置TeamCity
2.5.2 设置Jenkins
2.6 使用Selenium-Grid扩展功能
2.7 一图胜过千言万语
2.8 别畏惧庞大的错误栈追踪信息
2.9 总结
第3章 必知的异常
3.1 NoSuchElementException异常
3.2 NoSuchFrameException异常
3.3 NoSuchWindowException异常
3.4 ElementNotVisibleException异常
3.5 StaleElementReferenceException异常
3.6 InvalidElementStateException异常
3.7 UnsupportedCommandException异常
3.8 UnreachableBrowserException异常
3.9 SessionNotFoundException异常
3.10 WebDriverException异常—元素此时不可单击
3.11 NoAlertPresentException异常
3.12 总结
第4章 等待的艺术
4.1 页面真的准备好了吗
4.2 影响页面加载的外部因素
4.2.1 计算机规格因素
4.2.2 服务器规格因素
4.2.3 JavaScript引擎性能因素
4.2.4 网络因素
4.3 解决问题的思路
4.4 Selenium内置的等待机制
4.4.1 页面加载超时机制
4.4.2 脚本超时机制
4.4.3 隐式等待超时机制
4.5 使用显式等待
4.6 显式等待的核心——流式等待
4.6.1 函数
4.6.2 Java 8 Lambda表达式
4.7 总结
第5章 使用高效的页面对象
5.1 为何不断做重复的事情
5.2 一切始于页面对象
5.3 页面对象关注点的分离
5.4 Java PageFactory类简介
5.4.1 使用PageFactory注释
5.4.2 初始化代理对象
5.4.3 PageFactory类存在的问题
5.5 Query对象简介
5.6 选择PageFactory类还是Query对象
5.7 创建可扩展的页面对象
5.8 将页面对象转换为易读的DSL
5.9 流式页面对象
5.10 总结
第6章 使用高级用户交互API
6.1 API简介
6.2 使用API解决困难问题
6.2.1 使用悬停菜单
6.2.2 使用拖放操作
6.2.3 使用偏移量
6.2.4 使用快捷访问键
6.2.5 高级交互API并非绝对有效
6.3 总结
第7章 使用Selenium执行JavaScript代码
7.1 JavaScript执行器简介
7.2 JavaScript执行器的误用与滥用
7.3 JavaScript执行器的正确用法
7.4 更复杂的案例
7.5 JavaScript库的导入方式
7.6 JavaScript库的导入原则
7.7 如何执行异步脚本
7.8 自动实现用户交互
7.9 总结
第8章 实事求是
8.1 使用Selenium下载文件
8.1.1 使用场景
8.1.2 面临的问题
8.1.3 下一步的行动
8.1.4 真需要下载文件吗
8.1.5 检查链接是否有效
8.1.6 下载文件的办法
8.1.7 使用Selenium协助下载文件
8.2 通过Selenium无法跟踪网络流量
8.3 跟踪网络流量的办法
8.4 使用Selenium编写性能测试
8.5 使用Selenium进行渗透测试
8.6 总结
第9章 将Docker整合到Selenium中
9.1 Docker简介
9.2 通过Docker启动Selenium-Grid
9.3 在新的Selenium-Grid上运行测试
9.4 将Docker容器的启动作为构建的一部分
9.5 使用Docker Maven插件
9.6 使用Docker Compose
9.7 Docker的不足之处
9.8 总结
第10章 展望Selenium的未来
10.1 机器学习—全新的追求
10.2 视觉验证
10.2.1 Applitools Eyes
10.2.2 引入人工智能
10.3 自我修复测试
10.4 自动编写测试
10.5 总结
附录A 如何进一步完善Selenium
附录B 使用JUnit
附录C Appium简介