Last active
August 29, 2015 13:57
-
-
Save abotalov/9608318 to your computer and use it in GitHub Desktop.
Check performance of first, match: :first
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'capybara' | |
require 'benchmark' | |
html = DATA.read | |
$app = proc { |env| [200, { "Content-Type" => "text/html" }, [html] ] } | |
def benchmark_average | |
sum = 0 | |
session = Capybara::Session.new(:selenium, $app) | |
session.visit("/") | |
100.times do | |
sum += Benchmark.realtime { yield(session) } | |
end | |
session.driver.quit | |
puts sum / 100 | |
end | |
# Selenium methods that IMO Capybara invokes are in parentheses | |
puts '1. No filters (1 * find_elements):' | |
benchmark_average { |session| session.first('.row', visible: false) } | |
puts "\n2a. No filters + text for first (1 * find_elements + 1 * execute_script):" | |
benchmark_average { |session| session.first('.row', visible: false).text(:all) } | |
puts "\n2b. No filters + visible for first (1 * find_elements + 1 * displayed?):" | |
benchmark_average { |session| session.first('.row', visible: false).visible? } | |
puts "\n2c. No filters + visible and text for first (1 * find_elements + 1 * displayed? + 1 * text):" | |
benchmark_average { |session| el = session.first('.row', visible: false); el.visible?; el.text } | |
puts "\n3a. Text filter (1 * find_elements + 30 * execute_script):" | |
benchmark_average { |session| session.first('.row', text: 'some text 1', visible: false) } | |
puts "\n3b. Visible filter (1 * find_elements + 30 * displayed?):" | |
benchmark_average { |session| session.first('.row') } | |
puts "\n3c. Visible + text filter (1 * find_elements + 30 * text + 1 * displayed?):" | |
benchmark_average { |session| session.first('.row', text: 'some text 1') } | |
__END__ | |
<!doctype html> | |
<html> | |
<body> | |
<div class="row">some text 1</div> | |
<div class="row">some text 2</div> | |
<div class="row">some text 3</div> | |
<div class="row">some text 4</div> | |
<div class="row">some text 5</div> | |
<div class="row">some text 7</div> | |
<div class="row">some text 8</div> | |
<div class="row">some text 9</div> | |
<div class="row">some text 10</div> | |
<div class="row">some text 11</div> | |
<div class="row">some text 12</div> | |
<div class="row">some text 13</div> | |
<div class="row">some text 14</div> | |
<div class="row">some text 15</div> | |
<div class="row">some text 16</div> | |
<div class="row">some text 17</div> | |
<div class="row">some text 18</div> | |
<div class="row">some text 19</div> | |
<div class="row">some text 20</div> | |
<div class="row">some text 21</div> | |
<div class="row">some text 22</div> | |
<div class="row">some text 23</div> | |
<div class="row">some text 24</div> | |
<div class="row">some text 25</div> | |
<div class="row">some text 26</div> | |
<div class="row">some text 27</div> | |
<div class="row">some text 28</div> | |
<div class="row">some text 29</div> | |
<div class="row">some text 30</div> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment