Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Александр Баяндин (Badoo), Как использовать Chr...

CodeFest
February 01, 2018

Александр Баяндин (Badoo), Как использовать Chrome DevTools в Selenium тестах, CodeFest 2017

https://2017.codefest.ru/lecture/1158

Chrome DevTools — один из наиболее полезных инструментов веб-разработчика. Он позволяет получать исчерпывающую информацию о странице и запросах и эмулировать мобильные браузеры на медленных устройствах. В своём докладе Александр расскажет о том, как можно использовать мощь DevTools в Selenium-тестах и как сделать их отладку более удобной.

CodeFest

February 01, 2018
Tweet

More Decks by CodeFest

Other Decks in Technology

Transcript

  1. 400K Регистраций в день 5 Платформ 340M Пользователей 1.8ч Использование

    в день 350M Сообщений в день 21M DAU 60M MAU 10M Фотозагрузок в день О нас
  2. 400K Регистраций в день 5 Платформ 340M Пользователей 1.8ч Использование

    в день 350M Сообщений в день 21M DAU 60M MAU 10M Фотозагрузок в день О нас
  3. Mobile Test Automation 6 ✦ Ruby & Cucumber ✦ Calabash

    ✦ Winium.Mobile ✦ Selenium + Chrome
  4. План 7 ✦ Как видеть HTTP запросы во время прохождения

    теста Как работают Chrome DevTools Как работает ChromeDriver
  5. План 7 ✦ Как видеть HTTP запросы во время прохождения

    теста Как работают Chrome DevTools Как работает ChromeDriver ✦ Как видеть выполнение теста
  6. План 7 ✦ Как видеть HTTP запросы во время прохождения

    теста Как работают Chrome DevTools Как работает ChromeDriver ✦ Как видеть выполнение теста ✦ Как использовать все инструменты из Chrome DevTools
  7. 9

  8. 10

  9. 11

  10. 12

  11. 14

  12. 15

  13. 16

  14. 17

  15. 17

  16. 20

  17. 21

  18. 22

  19. 23

  20. 24

  21. 25

  22. 25

  23. План 28 ✦ Как видеть HTTP запросы во время прохождения

    теста Как работают Chrome DevTools Как работает ChromeDriver ✦ Как видеть выполнение теста ✦ Как использовать все инструменты из Chrome DevTools
  24. DevTools ✦ Это веб-приложение (html, css, js) ✦ Использует Chrome

    Debugging Protocol https://developers.google.com/web/tools/chrome-devtools/
  25. Chrome Debugging Protocol ✦ Реализован поверх WebSocket ✦ Команды ✦

    Подписки на события https://developer.chrome.com/devtools/docs/debugger-protocol
  26. План 38 ✦ Как видеть HTTP запросы во время прохождения

    теста Как работают Chrome DevTools Как работает ChromeDriver ✦ Как видеть выполнение теста ✦ Как использовать все инструменты из Chrome DevTools
  27. +-+ +-+ +--------+ +------------+ |C| |T|<---->|Selenium|<---->|ChromeDriver|<------->|h| |e| +--------+ +------------+ |r|

    |s| |o| |t| ----------------------->|m| +-+ |e| +-+ / / / / / / / / / / 44 DevTools
  28. +-+ +-+ +--------+ +------------+ |C| |T|<---->|Selenium|<---->|ChromeDriver|<------->|h| |e| +--------+ +------------+ |r|

    |s| |o| |t| ----------------------->|m| +-+ |e| +-+ / / / / / / / / / / 46 DevTools
  29. +-+ +-+ +-+ +--------+ +------------+ |P| |C| |T|<---->|Selenium|<---->|ChromeDriver|<->|r| |h| |e|

    +--------+ +------------+ |o|<->|r| |s| |x| |o| |t| ----------------->|y| |m| +-+ +-+ |e| +-+ 47 DevTools
  30. +-+ |C| |h| |r| |o| |m| |e| |D| |r| |i|

    |v| |e| |r| +-+ POST /session 50
  31. +-+ |C| |h| |r| |o| |m| |e| |D| |r| |i|

    |v| |e| |r| +-+ POST /session DesiredCapabilities 50
  32. +-+ |C| |h| |r| |o| |m| |e| |D| |r| |i|

    |v| |e| |r| +-+ POST /session DesiredCapabilities chromeOptions 50
  33. +-+ |C| |h| |r| |o| |m| |e| |D| |r| |i|

    |v| |e| |r| +-+ POST /session DesiredCapabilities chromeOptions binary 50
  34. +-+ |C| |h| |r| |o| |m| |e| |D| |r| |i|

    |v| |e| |r| +-+ POST /session google-chrome DesiredCapabilities chromeOptions binary 50
  35. +-+ |C| |h| |r| |o| |m| |e| |D| |r| |i|

    |v| |e| |r| +-+ POST /session google-chrome … --remote-debugging-port=X DesiredCapabilities chromeOptions binary 51
  36. +-+ |C| |h| |r| |o| |m| |e| |D| |r| |i|

    |v| |e| |r| +-+ POST /session google-chrome … --remote-debugging-port=X 12000 < X < 13000 DesiredCapabilities chromeOptions binary 51
  37. +-+ |C| |h| |r| +-+ |o| |C| |m| |h| |e|

    |r| |D| |o| |r| |m| |i| |e| |v| +-+ |e| |r| +-+ 52
  38. +-+ |C| |h| |r| +-+ |o| |C| |m| |h| |e|

    |r| |D| |o| |r| |m| |i| |e| |v| +-+ |e| |r| +-+ /json/version 52
  39. +-+ |C| |h| |r| +-+ |o| |C| |m| |h| |e|

    |r| |D| |o| |r| |m| |i| |e| |v| +-+ |e| |r| +-+ /json/version { "Browser": "Chrome/54.0.2840.98", "Protocol-Version": "1.2", "User-Agent": "…", "WebKit-Version": "537.36 (@8ee402c…ad)" } 52
  40. +-+ |C| |h| |r| +-+ |o| |C| |m| |h| |e|

    |r| |D| |o| |r| |m| |i| |e| |v| +-+ |e| |r| +-+ /json/list /json/version 53
  41. +-+ |C| |h| |r| +-+ |o| |C| |m| |h| |e|

    |r| |D| |o| |r| |m| |i| |e| |v| +-+ |e| |r| +-+ /json/list [{ "id": "…", "webSocketDebuggerUrl": "…", "devtoolsFrontendUrl": "…", … }, …] /json/version 53
  42. +-+ |C| |h| |r| +-+ |o| |C| |m| |h| |e|

    |r| |D| |o| |r| |m| |i| |e| |v| +-+ |e| |r| +-+ ws:/ /webSocketDebuggerUrl /json/list /json/version 54
  43. +-+ |C| |h| |r| +-+ |o| |C| |m| |h| |e|

    |r| |D| |o| |r| |m| |i| |e| |v| +-+ |e| |r| +-+ ws:/ /webSocketDebuggerUrl /json/list /json/version set-up + chromeOptions 54
  44. +-+ |C| |h| |r| |o| |m| |e| |D| |r| |i|

    |v| |e| |r| +-+ POST /session DesiredCapabilities chromeOptions binary 56
  45. +-+ |C| |h| |r| |o| |m| |e| |D| |r| |i|

    |v| |e| |r| +-+ POST /session chrome-wrapper DesiredCapabilities chromeOptions binary 56
  46. +-+ |C| |h| |r| |o| |m| |e| |D| |r| |i|

    |v| |e| |r| +-+ POST /session chrome-wrapper … --remote-debugging-port=X DesiredCapabilities chromeOptions binary 57
  47. +-+ |C| |h| |r| |o| |m| |e| |D| |r| |i|

    |v| |e| |r| +-+ POST /session chrome-wrapper … --remote-debugging-port=X DesiredCapabilities chromeOptions binary portX 57
  48. +-+ |C| |h| |r| |o| |m| |e| |D| |r| |i|

    |v| |e| |r| +-+ POST /session chrome-wrapper … --remote-debugging-port=X DesiredCapabilities chromeOptions binary portY portX 57
  49. +-+ |C| |h| |r| +-+ |o| |C| |m| |h| |e|

    |r| |D| |o| |r| +--------------+ |m| |i| |DevTools Proxy| |e| |v| +--------------+ +-+ |e| |r| +-+ 58
  50. +-+ |C| |h| |r| +-+ |o| |C| |m| |h| |e|

    |r| |D| |o| |r| +--------------+ |m| |i| |DevTools Proxy| |e| |v| +--------------+ +-+ |e| |r| +-+ /json/version portX 58
  51. +-+ |C| |h| |r| +-+ |o| |C| |m| |h| |e|

    |r| |D| |o| |r| +--------------+ |m| |i| |DevTools Proxy| |e| |v| +--------------+ +-+ |e| |r| +-+ /json/version portX portY 58
  52. +-+ |C| |h| |r| +-+ |o| |C| |m| |h| |e|

    |r| |D| |o| |r| +--------------+ |m| |i| |DevTools Proxy| |e| |v| +--------------+ +-+ |e| |r| +-+ /json/version portX portY 58
  53. +-+ |C| |h| |r| +-+ |o| |C| |m| |h| |e|

    |r| |D| |o| |r| +--------------+ |m| |i| |DevTools Proxy| |e| |v| +--------------+ +-+ |e| |r| +-+ /json/version portX portY 58
  54. +-+ |C| |h| |r| +-+ |o| |C| |m| |h| |e|

    |r| |D| |o| |r| +--------------+ |m| |i| |DevTools Proxy| |e| |v| +--------------+ +-+ |e| |r| +-+ ws ws DevTools portX portY 59
  55. +-+ |C| |h| |r| +-+ |o| |C| |m| |h| |e|

    |r| |D| |o| |r| +--------------+ |m| |i| |DevTools Proxy| |e| |v| +--------------+ +-+ |e| |r| +-+ ws ws DevTools w s portX portX portY 59
  56. +-+ |C| |h| |r| +-+ |o| |C| |m| |h| |e|

    |r| |D| |o| |r| +--------------+ |m| |i| |DevTools Proxy| |e| |v| +--------------+ +-+ |e| |r| +-+ : 12000 < X < 13000 ws ws DevTools w s portX portX portY 59
  57. +-+ |C| |h| |r| +-+ |o| |C| |m| |h| |e|

    |r| |D| |o| |r| +--------------+ |m| |i| |DevTools Proxy| |e| |v| +--------------+ +-+ |e| |r| +-+ ws ws w s portZ portX portY 60 DevTools
  58. План 61 ✦ Как видеть HTTP запросы во время прохождения

    теста Как работают Chrome DevTools Как работает ChromeDriver
  59. План 61 ✦ Как видеть HTTP запросы во время прохождения

    теста Как работают Chrome DevTools Как работает ChromeDriver ✦ Как видеть выполнение теста
  60. План 61 ✦ Как видеть HTTP запросы во время прохождения

    теста Как работают Chrome DevTools Как работает ChromeDriver ✦ Как видеть выполнение теста ✦ Как использовать все инструменты из Chrome DevTools
  61. +--------------+ | ChromeDriver | +-+ +--------------+ |C| |h| |r| |o|

    +----------+ |m| | DevTools | |e| +----------+ +-+ 63
  62. +--------------+ +-+ | ChromeDriver | | | +-+ +--------------+ |P|

    |C| |r| |h| |o| |r| |x| |o| +----------+ |y| |m| | DevTools | | | |e| +----------+ +-+ +-+ 64
  63. +--------------+ +-+ | ChromeDriver | | | +-+ +--------------+ |P|

    |C| |r| |h| |o| |r| |x| |o| +----------+ |y| |m| | DevTools | | | |e| +----------+ +-+ +-+ 64
  64. +--------------+ +-+ | ChromeDriver | | | +-+ +--------------+ |P|

    |C| |r| |h| |o| |r| |x| |o| +----------+ |y| |m| | DevTools | | | |e| +----------+ +-+ +-+ 64
  65. План 67 ✦ Как видеть HTTP запросы во время прохождения

    теста Как работают Chrome DevTools Как работает ChromeDriver ✦ Как видеть выполнение теста ✦ Как использовать все инструменты из Chrome DevTools
  66. ?

  67. План 79 ✦ Как видеть HTTP запросы во время прохождения

    теста Как работают Chrome DevTools Как работает ChromeDriver ✦ Как видеть выполнение теста ✦ Как использовать все инструменты из Chrome DevTools
  68. +-+ +-+ +-+ +--------+ +------------+ |P| |C| |T|<---->|Selenium|<---->|ChromeDriver|<->|r| |h| |e|

    +--------+ +------------+ |o|<->|r| |s| |x| |o| |t|<------------------------------------->|y| |m| +-+ +-+ |e| +-+ WebSocket Connection 88
  69. Полезно знать ✦ devtools-proxy полностью совместим с Selenium ✦ Пока

    нет поддержки Windows ✦ Только для Chromium / Google Chrome 91
  70. Планы на будущее 93 ✦ Научиться останавливаться на debugger /

    breakpoints ✦ Научиться получать данные Chrome Push Notification
  71. Планы на будущее 96 ✦ Научиться останавливаться на debugger /

    breakpoints ✦ Научиться получать данные Chrome Push Notification
  72. Планы на будущее 96 ✦ Научиться останавливаться на debugger /

    breakpoints ✦ Научиться получать данные Chrome Push Notification ✦ Поддержка Android
  73. Планы на будущее 96 ✦ Научиться останавливаться на debugger /

    breakpoints ✦ Научиться получать данные Chrome Push Notification ✦ Поддержка Android ✦ Поддержка Windows (для chrome-wrapper)
  74. Планы на будущее 96 ✦ Научиться останавливаться на debugger /

    breakpoints ✦ Научиться получать данные Chrome Push Notification ✦ Поддержка Android ✦ Поддержка Windows (для chrome-wrapper) ✦ Поддержка Firefox / Edge
  75. Сегодня я многое понял… ✦ Как видеть HTTP запросы во

    время прохождения теста ✦ Как видеть выполнение теста 97
  76. Сегодня я многое понял… ✦ Как видеть HTTP запросы во

    время прохождения теста ✦ Как видеть выполнение теста ✦ Как использовать все инструменты из Chrome DevTools 97