SlideShare a Scribd company logo
Ruby integration
testing tools
2010
2015
«Ruby integration testing tools»
2015
«Ruby integration testing tools»
2015
_heading1 for h1
_dTerm for dt
_dList for dl
_spandiv for span or div
exists? calls exists1? 3 times
«Ruby integration testing tools»
capybara-poltergeist-phantomjs 0.72 0.7 1.68 x x 3.29 x
capybara-racktest 0.05 x x x x x x
capybara-selenium-chrome 1.77 1.73 3.94 7.66 2.77 3.91 4.65
capybara-selenium-firefox 2.76 2.47 4.59 4.87 4.18 x 4.91
capybara-selenium-htmlunit 1.6 x x x x x x
capybara-selenium-ie 4.35 x 21.91 6.91 x 7.01 26.21
capybara-selenium-phantomjs 0.8 1.25 2.82 x x x x
capybara-webkit 0.12 x 0.82 x x 3.24 x
sahi-chrome 0.33 1.3 2.04 3.66 2.34 4.37 1.95
sahi-firefox 0.75 1.41 2.24 2.78 2.78 6.09 2.7
sahi-phantomjs x x x x x x x
watir-selenium-chrome 0.56 0.68 1.32 2.33 1.83 3.11 0.79
watir-selenium-firefox 0.22 0.45 1.27 1.51 2.32 4.11 1.35
watir-selenium-phantomjs 0.2 0.62 0.8 x x 3.79 x
Typical errors in
integration tests
find(‘.item’).click
Capybara.default_wait_time
•click_link(‘.item’)
•click_on(text_or_id)
• have_selector(‘.item’)
«Ruby integration testing tools»
sleep 1
wait for something on page
•_sahi._wait($timeout[, $condition])
•Watir::Wait.until { ... }
• Capybara.using_wait_time(seconds) { … }
post.reload.liked?.should be_true
slow ajax
•wait_for_ajax
• wait_until { post.reload.liked? }
page.find(:xpath,
‘html/body/div/nav/a[4]’)
•unreadable xpath
• flexible DOM structure
find(‘nav .settings’)
all(‘.item’).first
ordering items on page
first(‘.item’)
have_selector(‘th:nth-child(4)’)
cross-browser compatibility
have_selector(‘th:first-child+th+th+th’)
have_selector(‘.col-md-9.settings’)
mixing semantics and markup
have_selector(‘.settings’)
find(‘.checkbox’).set(true)
not idempotent for checkbox
«Ruby integration testing tools»
find(‘.checkbox’).set(true)
not idempotent for checkbox
find(‘.checkbox’).set(false)
find(‘.checkbox’).set(true)
find(‘input’).value != ‘’
value could be ‘null’ or ‘undefined’
have_field(‘name’, with: ‘value’)
click_link(‘a’)
Font Awesome
width: 12px;
height: 12px;
Decorating radio input
find(“label”, text: “bar”).click
label
input type=“radio” value=“foo”
find(“[value=‘foo’]”).click
find(‘input’).set(‘r’)
find(‘input’).set(‘rn’)
platform dependence
•Capybara.current_driver
•_sahi._isIE
•browser.driver.browser
test gaps
Test 1 Test 2
Test 1
Test 2
before(:each) { login_as @user }
too slow
• combine small tests to one
•use devise helper
something goes wrong
not supported or buggy
• evaluate_script
•execute_script
•browser_js
useful gems:
• vcr
• parallel_tests
• capybara-angular
• capybara-extensions
• watir-capybara-helpers
capybara-webkit
or
selenium-webdriver
useful services:
• browserstack
• sauce labs
• solano labs(tddium)
Questions?
Links
• http://altoros.github.io/2013/running-capybara-tests-in-remote-b
• https://coderwall.com/p/aklybw
• https://gist.github.com/jnicklas/d8da686061f0a59ffdf7
• http://www.browserstack.com/
• https://saucelabs.com/
• https://www.tddium.com/
• http://jnicklas.github.io/capybara/
• http://watirwebdriver.com/
• http://sahipro.com/
• https://github.com/melnikaite/ritt_performance

More Related Content

PDF
Stampede con 2014 cassandra in the real world
PDF
Hardening cassandra q2_2016
PDF
HashiCorp Vault Workshop:幫 Credentials 找個窩
PDF
HashiTLS Demystifying Security Certs
PDF
Secret Management with Hashicorp’s Vault
PDF
Securing Cassandra The Right Way
PDF
HashiCorp's Vault - The Examples
PDF
Dynamic Database Credentials: Security Contingency Planning
Stampede con 2014 cassandra in the real world
Hardening cassandra q2_2016
HashiCorp Vault Workshop:幫 Credentials 找個窩
HashiTLS Demystifying Security Certs
Secret Management with Hashicorp’s Vault
Securing Cassandra The Right Way
HashiCorp's Vault - The Examples
Dynamic Database Credentials: Security Contingency Planning

What's hot (6)

PDF
Chickens & Eggs: Managing secrets in AWS with Hashicorp Vault
PDF
C* Summit EU 2013: Cassandra Internals
ODP
Meetup cassandra for_java_cql
PDF
Hiding secrets in Vault
PDF
Software Development with Apache Cassandra
PPTX
Vault - Secret and Key Management
Chickens & Eggs: Managing secrets in AWS with Hashicorp Vault
C* Summit EU 2013: Cassandra Internals
Meetup cassandra for_java_cql
Hiding secrets in Vault
Software Development with Apache Cassandra
Vault - Secret and Key Management
Ad

More from Olga Lavrentieva (20)

PPTX
15 10-22 altoros-fact_sheet_st_v4
PPTX
Сергей Ковалёв (Altoros): Practical Steps to Improve Apache Hive Performance
PPTX
Андрей Козлов (Altoros): Оптимизация производительности Cassandra
PDF
Владимир Иванов (Oracle): Java: прошлое и будущее
PPTX
Brug - Web push notification
PDF
Александр Ломов: "Reactjs + Haskell + Cloud Foundry = Love"
PPTX
Максим Жилинский: "Контейнеры: под капотом"
PPTX
Александр Протасеня: "PayPal. Различные способы интеграции"
PPTX
Сергей Черничков: "Интеграция платежных систем в .Net приложения"
PPTX
Антон Шемерей «Single responsibility principle в руби или почему instanceclas...
PDF
Егор Воробьёв: «Ruby internals»
PDF
Андрей Колешко «Что не так с Rails»
PDF
Дмитрий Савицкий «Ruby Anti Magic Shield»
PPTX
Сергей Алексеев «Парное программирование. Удаленно»
PPTX
«Почему Spark отнюдь не так хорош»
PPTX
«Cassandra data modeling – моделирование данных для NoSQL СУБД Cassandra»
PPTX
«Практика построения высокодоступного решения на базе Cloud Foundry Paas»
PPTX
«Дизайн продвинутых нереляционных схем для Big Data»
PPTX
«Обзор возможностей Open cv»
PPTX
«Нужно больше шин! Eventbus based framework vertx.io»
15 10-22 altoros-fact_sheet_st_v4
Сергей Ковалёв (Altoros): Practical Steps to Improve Apache Hive Performance
Андрей Козлов (Altoros): Оптимизация производительности Cassandra
Владимир Иванов (Oracle): Java: прошлое и будущее
Brug - Web push notification
Александр Ломов: "Reactjs + Haskell + Cloud Foundry = Love"
Максим Жилинский: "Контейнеры: под капотом"
Александр Протасеня: "PayPal. Различные способы интеграции"
Сергей Черничков: "Интеграция платежных систем в .Net приложения"
Антон Шемерей «Single responsibility principle в руби или почему instanceclas...
Егор Воробьёв: «Ruby internals»
Андрей Колешко «Что не так с Rails»
Дмитрий Савицкий «Ruby Anti Magic Shield»
Сергей Алексеев «Парное программирование. Удаленно»
«Почему Spark отнюдь не так хорош»
«Cassandra data modeling – моделирование данных для NoSQL СУБД Cassandra»
«Практика построения высокодоступного решения на базе Cloud Foundry Paas»
«Дизайн продвинутых нереляционных схем для Big Data»
«Обзор возможностей Open cv»
«Нужно больше шин! Eventbus based framework vertx.io»
Ad

Recently uploaded (20)

PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
KodekX | Application Modernization Development
PPTX
Spectroscopy.pptx food analysis technology
PPTX
Big Data Technologies - Introduction.pptx
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Empathic Computing: Creating Shared Understanding
PDF
Approach and Philosophy of On baking technology
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Machine learning based COVID-19 study performance prediction
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPT
Teaching material agriculture food technology
NewMind AI Weekly Chronicles - August'25 Week I
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
KodekX | Application Modernization Development
Spectroscopy.pptx food analysis technology
Big Data Technologies - Introduction.pptx
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Empathic Computing: Creating Shared Understanding
Approach and Philosophy of On baking technology
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Understanding_Digital_Forensics_Presentation.pptx
MIND Revenue Release Quarter 2 2025 Press Release
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Unlocking AI with Model Context Protocol (MCP)
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
“AI and Expert System Decision Support & Business Intelligence Systems”
Machine learning based COVID-19 study performance prediction
Diabetes mellitus diagnosis method based random forest with bat algorithm
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Teaching material agriculture food technology

«Ruby integration testing tools»

Editor's Notes

  • #4: 3 игрока с начала 2000-х capybara, популярный, не только selenium, нет четкого указания по чем ищем, популярное headless webkit, косяк с поддержкой watir, класс для каждого тега, html5, кастомные теги, четкий быстрый поиск, косяк с rspec sahi, chrome, ff, safari, (opera, phantomjs, htmlunit), js api, buggy recoder, monkeypath ruby gem, strange methods, strange support кто что использовал что нравилось и не нравилось был ли переход с одного тула на другой (watir-capybara-helpers) какие связи (тулы) могут исчезнут (capybara-webkit) что быстрее (без js htmlunit или rack::test, с js - webkit или phantomjs через 3 разных тула, с реальным браузером - chrome)
  • #5: capybara-webkit долгое время с Dec 25, 2013 до Jul 02, 2014 нельзя было использовать новые версии capybara казалось что гем умирает, но сейчас все снова в порядке
  • #6: 3 игрока с начала 2000-х sahi, chrome, ff, safari, opera, phantomjs, htmlunit кто что использовал что нравилось и не нравилось был ли переход с одного тула на другой (watir-capybara-helpers) какие связи (тулы) могут исчезнут (capybara-webkit) что быстрее (без js htmlunit или rack::test, с js - webkit или phantomjs через 3 разных тула, с реальным браузером - chrome)
  • #7: watir-rspec последний кормит был сделан Dec 6, 2013 поддержка rspec 3 есть в одном из форков, и то с варнингами
  • #8: 3 игрока с начала 2000-х sahi, chrome, ff, safari, opera, phantomjs, htmlunit кто что использовал что нравилось и не нравилось был ли переход с одного тула на другой (watir-capybara-helpers) какие связи (тулы) могут исчезнут (capybara-webkit) что быстрее (без js htmlunit или rack::test, с js - webkit или phantomjs через 3 разных тула, с реальным браузером - chrome)
  • #9: sahi Sahi means "Right", "Correct", "Apt" or "Cool" in Hindi. разработано в индии стоит $495 в год последняя open source версия 2013 года вообще не работает в pro версии их хваленый рекодер записывает не все! (таб клик) даже pro версия не смогла воспроизвести самые простые шаги записанныей самой собой конкретно в чем ошибка не пишет даже записанные демо скрипты не работают! гем для руби есть, но тестовый сервер придется запускать вручную более того гем пришлось манкипатчить что бы он заработал названия методов придумывали накурившись распечаток документации w3c _heading1 для h1 _dTerm для dt _dList для dl или чего-то покрепче покурили _spandiv для span или div exists1? ищет 1 раз, exists? вызывает exists1? 3 раза получить html код старицы или элемента я не смог contains_html? и contains_text?('text').exists? возвращает ошибку в /_s_/spr/concat.js короче создано тестерами для тестеров, а девелоперов позвать забыли)
  • #11: что бы понять насколько богато и качественно сделано dsl фреймворков 7 тестов кто что использовал что нравилось и не нравилось был ли переход с одного тула на другой (watir-capybara-helpers 334 загрузки) какие связи (тулы) могут исчезнут (capybara-webkit) что быстрее (без js htmlunit или rack::test, с js - webkit или phantomjs через 3 разных тула, с реальным браузером - chrome)