第 1章 如何加快測試速度 1
1.1 使開發(fā)人員易于運行測試 2
1.2 使用Apache Maven構建測試項目 2
1.3 并行執(zhí)行測試 8
1.4 使用TestNG進行并行測試 11
1.5 不存在銀彈 21
1.6 多瀏覽器支持 22
1.7 自動下載WebDriver二進制文件 30
1.8 后臺模式 38
1.9 總結 43
第 2章 如何正確處理失敗的測試 44
2.1 測試代碼的位置 44
2.2 測試是一種實時文檔 45
2.3 測試的可靠性 47
2.3.1 孤立的自動化團隊 47
2.3.2 時好時壞的測試 48
2.4 增強測試的可靠性 49
2.4.1 Git 50
2.4.2 Subversion 51
2.5 關鍵在于持續(xù)集成 52
2.5.1 設置TeamCity 55
2.5.2 設置Jenkins 61
2.6 使用Selenium-Grid擴展功能 68
2.7 一圖勝過千言萬語 73
2.8 別畏懼龐大的錯誤棧追蹤信息 79
2.9 總結 83
第3章 必知的異常 84
3.1 NoSuchElementException異?!?4
3.2 NoSuchFrameException異常 86
3.3 NoSuchWindowException異?!?6
3.4 ElementNotVisibleException異常 87
3.5 StaleElementReferenceException異?!?7
3.6 InvalidElementStateException異?!?0
3.7 UnsupportedCommandException異常 90
3.8 UnreachableBrowserException異?!?1
3.9 SessionNotFoundException異?!?3
3.10 WebDriverException異?!卮藭r不可單擊 93
3.11 NoAlertPresentException異?!?4
3.12 總結 94
第4章 等待的藝術 95
4.1 頁面真的準備好了嗎 95
4.2 影響頁面加載的外部因素 96
4.2.1 計算機規(guī)格因素 96
4.2.2 服務器規(guī)格因素 96
4.2.3 JavaScript引擎性能因素 97
4.2.4 網絡因素 97
4.3 解決問題的思路 97
4.4 Selenium內置的等待機制 98
4.4.1 頁面加載超時機制 99
4.4.2 腳本超時機制 99
4.4.3 隱式等待超時機制 100
4.5 使用顯式等待 104
4.6 顯式等待的核心——流式等待 106
4.6.1 函數 108
4.6.2 Java 8 Lambda表達式 111
4.7 總結 112
第5章 使用高效的頁面對象 113
5.1 為何不斷做重復的事情 113
5.2 一切始于頁面對象 121
5.3 頁面對象關注點的分離 123
5.4 Java PageFactory類簡介 125
5.4.1 使用PageFactory注釋 125
5.4.2 初始化代理對象 127
5.4.3 PageFactory類存在的問題 129
5.5 Query對象簡介 130
5.6 選擇PageFactory類還是Query對象 133
5.7 創(chuàng)建可擴展的頁面對象 133
5.8 將頁面對象轉換為易讀的DSL 137
5.9 流式頁面對象 140
5.10 總結 144
第6章 使用高級用戶交互API 145
6.1 API簡介 146
6.2 使用API解決困難問題 147
6.2.1 使用懸停菜單 147
6.2.2 使用拖放操作 151
6.2.3 使用偏移量 155
6.2.4 使用快捷訪問鍵 162
6.2.5 高級交互API并非絕對有效 170
6.3 總結 171
第7章 使用Selenium執(zhí)行JavaScript代碼 172
7.1 JavaScript執(zhí)行器簡介 172
7.2 JavaScript執(zhí)行器的誤用與濫用 175
7.3 JavaScript執(zhí)行器的正確用法 176
7.4 更復雜的案例 177
7.5 JavaScript庫的導入方式 184
7.6 JavaScript庫的導入原則 186
7.7 如何執(zhí)行異步腳本 186
7.8 自動實現用戶交互 188
7.9 總結 191
第8章 實事求是 192
8.1 使用Selenium下載文件 192
8.1.1 使用場景 192
8.1.2 面臨的問題 193
8.1.3 下一步的行動 193
8.1.4 真需要下載文件嗎 194
8.1.5 檢查鏈接是否有效 194
8.1.6 下載文件的辦法 202
8.1.7 使用Selenium協助下載文件 204
8.2 通過Selenium無法跟蹤網絡流量 211
8.3 跟蹤網絡流量的辦法 212
8.4 使用Selenium編寫性能測試 222
8.5 使用Selenium進行滲透測試 225
8.6 總結 228
第9章 將Docker整合到Selenium中 229
9.1 Docker簡介 229
9.2 通過Docker啟動Selenium-Grid 232
9.3 在新的Selenium-Grid上運行測試 237
9.4 將Docker容器的啟動作為構建的一部分 238
9.5 使用Docker Maven插件 242
9.6 使用Docker Compose 245
9.7 Docker的不足之處 247
9.8 總結 247
第 10章 展望Selenium的未來 249
10.1 機器學習—全新的追求 249
10.2 視覺驗證 251
10.2.1 Applitools Eyes 253
10.2.2 引入人工智能 260
10.3 自我修復測試 262
10.4 自動編寫測試 264
10.5 總結 264
附錄A 如何進一步完善Selenium 265
附錄B 使用JUnit 280
附錄C Appium簡介 288