como trazer sua banda        favorita para oSunday, September 11, 11        1
ou...Sunday, September 11, 11           2
os complicados                           testes de interface                           e componentes                      ...
Andrews Medina                                #cobrateam founder                           djangobrasil.org / python.org.b...
Francisco Souza                               #cobrateam member                                 djangobrasil.org          ...
proprietary software is the disease.                           Meet the cure.Sunday, September 11, 11                    6
Testes?Sunday, September 11, 11             7
Testes                           automatizadosSunday, September 11, 11                   8
Sunday, September 11, 11   9
show me the codeSunday, September 11, 11   9
interfaces web?Sunday, September 11, 11                     10
interfaces x                   componentes ricosSunday, September 11, 11               11
interfacesSunday, September 11, 11                12
componentesSunday, September 11, 11                 13
componentesSunday, September 11, 11                 14
Testes de interfaceSunday, September 11, 11                  15
o inícioSunday, September 11, 11              16
o início                    • testes de interface não eram                      automatizadosSunday, September 11, 11     ...
o início                    • testes de interface não eram                      automatizados                    • equipe ...
o início                    • testes de interface não eram                      automatizados                    • equipe ...
o início                    • testes de interface não eram                      automatizados                    • equipe ...
o declínioSunday, September 11, 11                17
o declínio                    • selenium rcSunday, September 11, 11                 17
o declínioSunday, September 11, 11                18
o declínio                    • xpath                           /e1//e3[not(ancestor::*[not(self::e1|self::e2)])]Sunday, S...
o declínioSunday, September 11, 11                19
o declínio                    • page objectSunday, September 11, 11                 19
a ressurreiçãoSunday, September 11, 11                    20
a ressurreição                    • testes unitários em componentesSunday, September 11, 11                               ...
a ressurreição                    • testes unitários em componentes                    • teste de intefaces web (browser)S...
a ressurreição                    • testes unitários em componentes                    • teste de intefaces web (browser) ...
testando                           componentesSunday, September 11, 11                 21
qunitSunday, September 11, 11           22
qunit                    • jquerySunday, September 11, 11               22
qunit                    • jquery                    • unitárioSunday, September 11, 11                 22
qunit                    • jquery                    • unitário                    • api feiaSunday, September 11, 11     ...
qunit                    • jquery                    • unitário                    • api feia                    • ruim pa...
jasmineSunday, September 11, 11             23
jasmine                    • bddSunday, September 11, 11              23
jasmine                    • bdd                    • api bonitaSunday, September 11, 11                23
jasmine                    • bdd                    • api bonita                    • inspirado no rspecSunday, September ...
jasmine                    • bdd                    • api bonita                    • inspirado no rspec                  ...
jasmine                    • bdd                    • api bonita                    • inspirado no rspec                  ...
Sunday, September 11, 11   24
show me the codeSunday, September 11, 11   24
testando interfaces                      web (browser)Sunday, September 11, 11                 25
ferramentasSunday, September 11, 11                 26
selenium 1.0Sunday, September 11, 11                  27
selenium 1.0                    • lentoSunday, September 11, 11                  27
selenium 1.0                    • lento                    • necessita de serverSunday, September 11, 11                  ...
selenium 1.0                    • lento                    • necessita de server                    • obsoletoSunday, Sept...
selenium 1.0                    • lento                    • necessita de server                    • obsoleto            ...
selenium 1.0                    • lento                    • necessita de server                    • obsoleto            ...
selenium 1.0                    • lento                    • necessita de server                    • obsoleto            ...
pyccuracySunday, September 11, 11               28
pyccuracy                    • linguagem naturalSunday, September 11, 11                  28
pyccuracy                    • linguagem natural                    • sintaxe complexaSunday, September 11, 11            ...
pyccuracy                    • linguagem natural                    • sintaxe complexa                    • difícil de man...
pyccuracy                    • linguagem natural                    • sintaxe complexa                    • difícil de man...
pyccuracy                    • linguagem natural                    • sintaxe complexa                    • difícil de man...
selenium 2.0Sunday, September 11, 11                  29
selenium 2.0                    • vários browsers (firefox, ie, chrome)Sunday, September 11, 11                            ...
selenium 2.0                    • vários browsers (firefox, ie, chrome)                    • instávelSunday, September 11, ...
selenium 2.0                    • vários browsers (firefox, ie, chrome)                    • instável                    • ...
selenium 2.0                    • vários browsers (firefox, ie, chrome)                    • instável                    • ...
zope testbrowserSunday, September 11, 11            30
zope testbrowser                    • rápidoSunday, September 11, 11            30
zope testbrowser                    • rápido                    • headlessSunday, September 11, 11            30
zope testbrowser                    • rápido                    • headless                    • não renderiza jsSunday, Se...
zope testbrowser                    • rápido                    • headless                    • não renderiza js          ...
zope testbrowser                    • rápido                    • headless                    • não renderiza js          ...
zope testbrowser                    • rápido                    • headless                    • não renderiza js          ...
htmlunitSunday, September 11, 11              31
htmlunit                    • rápidoSunday, September 11, 11                  31
htmlunit                    • rápido                    • headlessSunday, September 11, 11                  31
htmlunit                    • rápido                    • headless                    • suporta jsSunday, September 11, 11...
htmlunit                    • rápido                    • headless                    • suporta js                    • ja...
zombie.jsSunday, September 11, 11               32
zombie.js                    • rápidoSunday, September 11, 11               32
zombie.js                    • rápido                    • headlessSunday, September 11, 11               32
zombie.js                    • rápido                    • headless                    • node.jsSunday, September 11, 11  ...
zombie.js                    • rápido                    • headless                    • node.js                    • inst...
capybaraSunday, September 11, 11              33
capybara                    • api simplesSunday, September 11, 11               33
capybara                    • api simples                    • selenium 2 (firefox)Sunday, September 11, 11                ...
capybara                    • api simples                    • selenium 2 (firefox)                    • rubySunday, Septem...
capybara                    • api simples                    • selenium 2 (firefox)                    • ruby              ...
capybara                    • api simples                    • selenium 2 (firefox)                    • ruby              ...
capybara                    • api simples                    • selenium 2 (firefox)                    • ruby              ...
capybara                    • api simples                    • selenium 2 (firefox)                    • ruby              ...
e mais...                    • Mechanize                    • PhantomJS                    • twill                    • Wi...
splinter                           splinter.cobrateam.infoSunday, September 11, 11                             35
splinter é uma APISunday, September 11, 11          36
browser = Browser(‘firefox’)       browser.visit(‘http://cobrateam.info’)       assert browser.is_text_present(‘Projects’)...
browserSunday, September 11, 11             38
browser                    • visit(‘url’)Sunday, September 11, 11                   38
browser                    • visit(‘url’)                    • reload()Sunday, September 11, 11                   38
browser                    • visit(‘url’)                    • reload()                    • quit()Sunday, September 11, 1...
browser                    • visit(‘url’)                    • reload()                    • quit()                    • h...
browser                    • visit(‘url’)                    • reload()                    • quit()                    • h...
browser                    • visit(‘url’)                    • reload()                    • quit()                    • h...
procurando por                             elementosSunday, September 11, 11                    39
procurando por                             elementos                    • find_by_css(‘.classe’)Sunday, September 11, 11   ...
procurando por                             elementos                    • find_by_css(‘.classe’)                    • find_b...
procurando por                             elementos                    • find_by_css(‘.classe’)                    • find_b...
procurando por                             elementos                    • find_by_css(‘.classe’)                    • find_b...
procurando por                             elementos                    • find_by_css(‘.classe’)                    • find_b...
formuláriosSunday, September 11, 11                 40
formulários                    • fill(‘name’, ‘value’)Sunday, September 11, 11                     40
formulários                    • fill(‘name’, ‘value’)                    • attach_file(‘name’, ‘/path/to/file.txt’)Sunday, S...
formulários                    • fill(‘name’, ‘value’)                    • attach_file(‘name’, ‘/path/to/file.txt’)         ...
formulários                    • fill(‘name’, ‘value’)                    • attach_file(‘name’, ‘/path/to/file.txt’)         ...
formulários                    • fill(‘name’, ‘value’)                    • attach_file(‘name’, ‘/path/to/file.txt’)         ...
mouse eventsSunday, September 11, 11                  41
mouse events                    • find_by_css(‘.botao’).mouseover()Sunday, September 11, 11                                ...
mouse events                    • find_by_css(‘.botao’).mouseover()                    • find_by_css(‘.botao’).double_click(...
mouse events                    • find_by_css(‘.botao’).mouseover()                    • find_by_css(‘.botao’).double_click(...
e mais...Sunday, September 11, 11               42
e mais...                    • alertSunday, September 11, 11                  42
e mais...                    • alert                    • iframeSunday, September 11, 11                   42
e mais...                    • alert                    • iframe                    • status_codeSunday, September 11, 11 ...
e mais...                    • alert                    • iframe                    • status_code                    • ext...
e mais...                    • alert                    • iframe                    • status_code                    • ext...
e mais...                    • alert                    • iframe                    • status_code                    • ext...
Sunday, September 11, 11   43
show me the codeSunday, September 11, 11   43
futuro do projetoSunday, September 11, 11                       44
futuro do projeto                    • mais browsers/driversSunday, September 11, 11                       44
futuro do projeto                    • mais browsers/drivers                           • ieSunday, September 11, 11       ...
futuro do projeto                    • mais browsers/drivers                           • ie                           • zo...
futuro do projeto                    • mais browsers/drivers                           • ie                           • zo...
contribua!Sunday, September 11, 11                45
contribua!                • #cobrateam @ irc.freenode.netSunday, September 11, 11                          45
contribua!                • #cobrateam @ irc.freenode.net                • forkSunday, September 11, 11                   ...
contribua!                • #cobrateam @ irc.freenode.net                • fork                • pull requestSunday, Septe...
sikuliSunday, September 11, 11            46
sikuli                    • jython (java + script em python)Sunday, September 11, 11                                 46
sikuli                    • jython (java + script em python)                    • api amigávelSunday, September 11, 11    ...
sikuli                    • jython (java + script em python)                    • api amigável                    • multip...
sikuliSunday, September 11, 11            47
sikuli                    • muito sensívelSunday, September 11, 11                  47
sikuli                    • muito sensível                    • muito a ser desbravadoSunday, September 11, 11            ...
futuro?Sunday, September 11, 11             48
futuro?                    • testes visuaisSunday, September 11, 11                 48
futuro?Sunday, September 11, 11             49
futuro?Sunday, September 11, 11             49
como trazer sua banda        favorita para oSunday, September 11, 11        50
perguntas?                               splinter.cobrateam.info                           github.com/cobrateam/splinter  ...
Upcoming SlideShare
Loading in …5
×

Os complicados testes de interface

4,506 views

Published on

Palestra apresentada por Andrews Medina e Francisco Souza na QCONSP 2011, no dia

Published in: Technology

Os complicados testes de interface

  1. 1. como trazer sua banda favorita para oSunday, September 11, 11 1
  2. 2. ou...Sunday, September 11, 11 2
  3. 3. os complicados testes de interface e componentes webSunday, September 11, 11 3
  4. 4. Andrews Medina #cobrateam founder djangobrasil.org / python.org.br desenvolvedor @ globo.comSunday, September 11, 11 4
  5. 5. Francisco Souza #cobrateam member djangobrasil.org desenvolvedor @ globo.comSunday, September 11, 11 5
  6. 6. proprietary software is the disease. Meet the cure.Sunday, September 11, 11 6
  7. 7. Testes?Sunday, September 11, 11 7
  8. 8. Testes automatizadosSunday, September 11, 11 8
  9. 9. Sunday, September 11, 11 9
  10. 10. show me the codeSunday, September 11, 11 9
  11. 11. interfaces web?Sunday, September 11, 11 10
  12. 12. interfaces x componentes ricosSunday, September 11, 11 11
  13. 13. interfacesSunday, September 11, 11 12
  14. 14. componentesSunday, September 11, 11 13
  15. 15. componentesSunday, September 11, 11 14
  16. 16. Testes de interfaceSunday, September 11, 11 15
  17. 17. o inícioSunday, September 11, 11 16
  18. 18. o início • testes de interface não eram automatizadosSunday, September 11, 11 16
  19. 19. o início • testes de interface não eram automatizados • equipe de QASunday, September 11, 11 16
  20. 20. o início • testes de interface não eram automatizados • equipe de QA • selenium ideSunday, September 11, 11 16
  21. 21. o início • testes de interface não eram automatizados • equipe de QA • selenium ide • selenium rcSunday, September 11, 11 16
  22. 22. o declínioSunday, September 11, 11 17
  23. 23. o declínio • selenium rcSunday, September 11, 11 17
  24. 24. o declínioSunday, September 11, 11 18
  25. 25. o declínio • xpath /e1//e3[not(ancestor::*[not(self::e1|self::e2)])]Sunday, September 11, 11 18
  26. 26. o declínioSunday, September 11, 11 19
  27. 27. o declínio • page objectSunday, September 11, 11 19
  28. 28. a ressurreiçãoSunday, September 11, 11 20
  29. 29. a ressurreição • testes unitários em componentesSunday, September 11, 11 20
  30. 30. a ressurreição • testes unitários em componentes • teste de intefaces web (browser)Sunday, September 11, 11 20
  31. 31. a ressurreição • testes unitários em componentes • teste de intefaces web (browser) • teste de interfaces além do browserSunday, September 11, 11 20
  32. 32. testando componentesSunday, September 11, 11 21
  33. 33. qunitSunday, September 11, 11 22
  34. 34. qunit • jquerySunday, September 11, 11 22
  35. 35. qunit • jquery • unitárioSunday, September 11, 11 22
  36. 36. qunit • jquery • unitário • api feiaSunday, September 11, 11 22
  37. 37. qunit • jquery • unitário • api feia • ruim para testes assíncronosSunday, September 11, 11 22
  38. 38. jasmineSunday, September 11, 11 23
  39. 39. jasmine • bddSunday, September 11, 11 23
  40. 40. jasmine • bdd • api bonitaSunday, September 11, 11 23
  41. 41. jasmine • bdd • api bonita • inspirado no rspecSunday, September 11, 11 23
  42. 42. jasmine • bdd • api bonita • inspirado no rspec • baseado em tópicosSunday, September 11, 11 23
  43. 43. jasmine • bdd • api bonita • inspirado no rspec • baseado em tópicos • bom para testes assíncronosSunday, September 11, 11 23
  44. 44. Sunday, September 11, 11 24
  45. 45. show me the codeSunday, September 11, 11 24
  46. 46. testando interfaces web (browser)Sunday, September 11, 11 25
  47. 47. ferramentasSunday, September 11, 11 26
  48. 48. selenium 1.0Sunday, September 11, 11 27
  49. 49. selenium 1.0 • lentoSunday, September 11, 11 27
  50. 50. selenium 1.0 • lento • necessita de serverSunday, September 11, 11 27
  51. 51. selenium 1.0 • lento • necessita de server • obsoletoSunday, September 11, 11 27
  52. 52. selenium 1.0 • lento • necessita de server • obsoleto • sintaxe ruimSunday, September 11, 11 27
  53. 53. selenium 1.0 • lento • necessita de server • obsoleto • sintaxe ruim • funcionalidades legaisSunday, September 11, 11 27
  54. 54. selenium 1.0 • lento • necessita de server • obsoleto • sintaxe ruim • funcionalidades legais • multi linguagemSunday, September 11, 11 27
  55. 55. pyccuracySunday, September 11, 11 28
  56. 56. pyccuracy • linguagem naturalSunday, September 11, 11 28
  57. 57. pyccuracy • linguagem natural • sintaxe complexaSunday, September 11, 11 28
  58. 58. pyccuracy • linguagem natural • sintaxe complexa • difícil de manterSunday, September 11, 11 28
  59. 59. pyccuracy • linguagem natural • sintaxe complexa • difícil de manter • baseado no selenium 1Sunday, September 11, 11 28
  60. 60. pyccuracy • linguagem natural • sintaxe complexa • difícil de manter • baseado no selenium 1 • multi linguagemSunday, September 11, 11 28
  61. 61. selenium 2.0Sunday, September 11, 11 29
  62. 62. selenium 2.0 • vários browsers (firefox, ie, chrome)Sunday, September 11, 11 29
  63. 63. selenium 2.0 • vários browsers (firefox, ie, chrome) • instávelSunday, September 11, 11 29
  64. 64. selenium 2.0 • vários browsers (firefox, ie, chrome) • instável • diferença entre browsers (api)Sunday, September 11, 11 29
  65. 65. selenium 2.0 • vários browsers (firefox, ie, chrome) • instável • diferença entre browsers (api) • menos features que o selenium 1Sunday, September 11, 11 29
  66. 66. zope testbrowserSunday, September 11, 11 30
  67. 67. zope testbrowser • rápidoSunday, September 11, 11 30
  68. 68. zope testbrowser • rápido • headlessSunday, September 11, 11 30
  69. 69. zope testbrowser • rápido • headless • não renderiza jsSunday, September 11, 11 30
  70. 70. zope testbrowser • rápido • headless • não renderiza js • api estávelSunday, September 11, 11 30
  71. 71. zope testbrowser • rápido • headless • não renderiza js • api estável • trata formulários de forma ‘especial’Sunday, September 11, 11 30
  72. 72. zope testbrowser • rápido • headless • não renderiza js • api estável • trata formulários de forma ‘especial’ • pythonSunday, September 11, 11 30
  73. 73. htmlunitSunday, September 11, 11 31
  74. 74. htmlunit • rápidoSunday, September 11, 11 31
  75. 75. htmlunit • rápido • headlessSunday, September 11, 11 31
  76. 76. htmlunit • rápido • headless • suporta jsSunday, September 11, 11 31
  77. 77. htmlunit • rápido • headless • suporta js • java =(Sunday, September 11, 11 31
  78. 78. zombie.jsSunday, September 11, 11 32
  79. 79. zombie.js • rápidoSunday, September 11, 11 32
  80. 80. zombie.js • rápido • headlessSunday, September 11, 11 32
  81. 81. zombie.js • rápido • headless • node.jsSunday, September 11, 11 32
  82. 82. zombie.js • rápido • headless • node.js • instávelSunday, September 11, 11 32
  83. 83. capybaraSunday, September 11, 11 33
  84. 84. capybara • api simplesSunday, September 11, 11 33
  85. 85. capybara • api simples • selenium 2 (firefox)Sunday, September 11, 11 33
  86. 86. capybara • api simples • selenium 2 (firefox) • rubySunday, September 11, 11 33
  87. 87. capybara • api simples • selenium 2 (firefox) • ruby • muitos drivers de terceirosSunday, September 11, 11 33
  88. 88. capybara • api simples • selenium 2 (firefox) • ruby • muitos drivers de terceiros • zombieSunday, September 11, 11 33
  89. 89. capybara • api simples • selenium 2 (firefox) • ruby • muitos drivers de terceiros • zombie • webkitSunday, September 11, 11 33
  90. 90. capybara • api simples • selenium 2 (firefox) • ruby • muitos drivers de terceiros • zombie • webkit • chromeSunday, September 11, 11 33
  91. 91. e mais... • Mechanize • PhantomJS • twill • WindmillSunday, September 11, 11 34
  92. 92. splinter splinter.cobrateam.infoSunday, September 11, 11 35
  93. 93. splinter é uma APISunday, September 11, 11 36
  94. 94. browser = Browser(‘firefox’) browser.visit(‘http://cobrateam.info’) assert browser.is_text_present(‘Projects’) browser = Browser(‘zope.testbrowser’) browser.visit(‘http://cobrateam.info’) assert browser.is_text_present(‘Projects’) browser = Browser(‘chrome’) browser.visit(‘http://cobrateam.info’) assert browser.is_text_present(‘Projects’)Sunday, September 11, 11 37
  95. 95. browserSunday, September 11, 11 38
  96. 96. browser • visit(‘url’)Sunday, September 11, 11 38
  97. 97. browser • visit(‘url’) • reload()Sunday, September 11, 11 38
  98. 98. browser • visit(‘url’) • reload() • quit()Sunday, September 11, 11 38
  99. 99. browser • visit(‘url’) • reload() • quit() • htmlSunday, September 11, 11 38
  100. 100. browser • visit(‘url’) • reload() • quit() • html • urlSunday, September 11, 11 38
  101. 101. browser • visit(‘url’) • reload() • quit() • html • url • titleSunday, September 11, 11 38
  102. 102. procurando por elementosSunday, September 11, 11 39
  103. 103. procurando por elementos • find_by_css(‘.classe’)Sunday, September 11, 11 39
  104. 104. procurando por elementos • find_by_css(‘.classe’) • find_by_id(‘meuid’)Sunday, September 11, 11 39
  105. 105. procurando por elementos • find_by_css(‘.classe’) • find_by_id(‘meuid’) • find_by_xpath(‘//body’)Sunday, September 11, 11 39
  106. 106. procurando por elementos • find_by_css(‘.classe’) • find_by_id(‘meuid’) • find_by_xpath(‘//body’) • find_by_tag(‘a’)Sunday, September 11, 11 39
  107. 107. procurando por elementos • find_by_css(‘.classe’) • find_by_id(‘meuid’) • find_by_xpath(‘//body’) • find_by_tag(‘a’) • find_by_name(‘search’)Sunday, September 11, 11 39
  108. 108. formuláriosSunday, September 11, 11 40
  109. 109. formulários • fill(‘name’, ‘value’)Sunday, September 11, 11 40
  110. 110. formulários • fill(‘name’, ‘value’) • attach_file(‘name’, ‘/path/to/file.txt’)Sunday, September 11, 11 40
  111. 111. formulários • fill(‘name’, ‘value’) • attach_file(‘name’, ‘/path/to/file.txt’) • check(‘name’) #checkboxSunday, September 11, 11 40
  112. 112. formulários • fill(‘name’, ‘value’) • attach_file(‘name’, ‘/path/to/file.txt’) • check(‘name’) #checkbox • choose(‘name’, ‘value’) #radio buttonSunday, September 11, 11 40
  113. 113. formulários • fill(‘name’, ‘value’) • attach_file(‘name’, ‘/path/to/file.txt’) • check(‘name’) #checkbox • choose(‘name’, ‘value’) #radio button • select(‘name’, ‘option’)Sunday, September 11, 11 40
  114. 114. mouse eventsSunday, September 11, 11 41
  115. 115. mouse events • find_by_css(‘.botao’).mouseover()Sunday, September 11, 11 41
  116. 116. mouse events • find_by_css(‘.botao’).mouseover() • find_by_css(‘.botao’).double_click()Sunday, September 11, 11 41
  117. 117. mouse events • find_by_css(‘.botao’).mouseover() • find_by_css(‘.botao’).double_click() • find_by_css(‘.botao’).mouseout()Sunday, September 11, 11 41
  118. 118. e mais...Sunday, September 11, 11 42
  119. 119. e mais... • alertSunday, September 11, 11 42
  120. 120. e mais... • alert • iframeSunday, September 11, 11 42
  121. 121. e mais... • alert • iframe • status_codeSunday, September 11, 11 42
  122. 122. e mais... • alert • iframe • status_code • extensõesSunday, September 11, 11 42
  123. 123. e mais... • alert • iframe • status_code • extensões • cookiesSunday, September 11, 11 42
  124. 124. e mais... • alert • iframe • status_code • extensões • cookies • mouse interactionsSunday, September 11, 11 42
  125. 125. Sunday, September 11, 11 43
  126. 126. show me the codeSunday, September 11, 11 43
  127. 127. futuro do projetoSunday, September 11, 11 44
  128. 128. futuro do projeto • mais browsers/driversSunday, September 11, 11 44
  129. 129. futuro do projeto • mais browsers/drivers • ieSunday, September 11, 11 44
  130. 130. futuro do projeto • mais browsers/drivers • ie • zombie.jsSunday, September 11, 11 44
  131. 131. futuro do projeto • mais browsers/drivers • ie • zombie.js • webkitSunday, September 11, 11 44
  132. 132. contribua!Sunday, September 11, 11 45
  133. 133. contribua! • #cobrateam @ irc.freenode.netSunday, September 11, 11 45
  134. 134. contribua! • #cobrateam @ irc.freenode.net • forkSunday, September 11, 11 45
  135. 135. contribua! • #cobrateam @ irc.freenode.net • fork • pull requestSunday, September 11, 11 45
  136. 136. sikuliSunday, September 11, 11 46
  137. 137. sikuli • jython (java + script em python)Sunday, September 11, 11 46
  138. 138. sikuli • jython (java + script em python) • api amigávelSunday, September 11, 11 46
  139. 139. sikuli • jython (java + script em python) • api amigável • multiplataformaSunday, September 11, 11 46
  140. 140. sikuliSunday, September 11, 11 47
  141. 141. sikuli • muito sensívelSunday, September 11, 11 47
  142. 142. sikuli • muito sensível • muito a ser desbravadoSunday, September 11, 11 47
  143. 143. futuro?Sunday, September 11, 11 48
  144. 144. futuro? • testes visuaisSunday, September 11, 11 48
  145. 145. futuro?Sunday, September 11, 11 49
  146. 146. futuro?Sunday, September 11, 11 49
  147. 147. como trazer sua banda favorita para oSunday, September 11, 11 50
  148. 148. perguntas? splinter.cobrateam.info github.com/cobrateam/splinter Andrews Medina Francisco Souza andrewsmedina.com franciscosouza.com @andrewsmedina @franciscosouza andrewsmedina@gmail.com f@souza.ccSunday, September 11, 11 51

×