Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(383)

Unified Diff: tools/testing/run_selenium.py

Issue 8920009: Add Safari to the list of browsers we test on a regular basis. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/testing/perf_testing/index.html ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/testing/run_selenium.py
===================================================================
--- tools/testing/run_selenium.py (revision 2391)
+++ tools/testing/run_selenium.py (working copy)
@@ -13,13 +13,19 @@
import platform
import selenium
from selenium.webdriver.support.ui import WebDriverWait
+import socket
import sys
+import time
def perf_test_done(driver):
"""Checks if the performance test has completed."""
+ return perf_test_done_helper(driver.page_source)
+
+def perf_test_done_helper(source):
+ """Tests to see if our performance test is done by printing a score."""
#This code is written this way to work around a current instability in the
# python webdriver bindings if you call driver.get_element_by_id.
- source = driver.page_source
+ #TODO(efortuna): Access these elements in a nicer way using DOM parser.
string = '<div id="status">'
index = source.find(string)
end_index = source.find('</div>', index+1)
@@ -27,7 +33,9 @@
return 'Score:' in source
def run_test_in_browser(browser, html_out, timeout, is_perf):
- """Run the desired test in the browser, and wait for the test to complete."""
+ """Run the desired test in the browser using Selenium 2.0 WebDriver syntax,
+ and wait for the test to complete. This is the newer syntax, that currently
+ supports Firefox, Chrome, IE, Opera (and some mobile browsers)."""
browser.get("file://" + html_out)
source = ''
try:
@@ -42,12 +50,33 @@
finally:
# A timeout exception is thrown if nothing happens within the time limit.
browser.close()
+ browser.quit()
return source
+def run_test_in_browser_selenium1(sel, html_out, timeout, is_perf):
+ """ Run the desired test in the browser using Selenium 1.0 syntax, and wait
+ for the test to complete. This is used for Safari, since it is not currently
+ supported on Selenium 2.0."""
+ sel.open('file://' + html_out)
+ source = sel.get_html_source()
+ def end_condition(source):
+ return 'PASS' in source and 'FAIL' in source
+ if is_perf:
+ end_condition = perf_test_done_helper
+
+ elapsed = 0
+ while (not end_condition(source)) and elapsed <= timeout:
+ sec = .25
+ time.sleep(sec)
+ elapsed += sec
+ source = sel.get_html_source()
+ sel.stop()
+ return source
+
def parse_args():
parser = optparse.OptionParser()
parser.add_option('--out', dest='out',
- help = 'The path for html output file that we will be writing to',
+ help = 'The path for html output file that we will running our test from',
action = 'store', default = '')
parser.add_option('--browser', dest='browser',
help = 'The browser type (default = chrome)',
@@ -69,13 +98,26 @@
if browser == 'chrome':
browser = selenium.webdriver.Chrome()
- elif browser == 'ff':
+ elif browser == 'ff':
browser = selenium.webdriver.Firefox()
elif browser == 'ie' and platform.system() == 'Windows':
browser = selenium.webdriver.Ie()
+ elif browser == 'safari' and platform.system() == 'Darwin':
+ sel = selenium.selenium('localhost', 4444, "*safari", 'file://' + html_out)
+ try:
+ sel.start()
+ except socket.error:
+ print 'ERROR: Could not connect to Selenium RC server. Are you running' +\
+ ' java -jar selenium-server-standalone-2.15.0.jar? If not, start ' + \
+ 'it before running this test.'
+ return 1
else:
raise Exception('Incompatible browser and platform combination.')
- source = run_test_in_browser(browser, html_out, timeout, is_perf)
+ source = ''
+ if browser == 'safari':
+ source = run_test_in_browser_selenium1(sel, html_out, timeout, is_perf)
+ else:
+ source = run_test_in_browser(browser, html_out, timeout, is_perf)
if is_perf:
# We're running a performance test.
@@ -92,6 +134,7 @@
else:
#The hacky way to get document.getElementById('body').innerHTML for this
# webpage, without the JavaScript.
+ #TODO(efortuna): Access these elements in a nicer way using DOM parser.
index = source.find('<body>')
index += len('<body>')
end_index = source.find('<script')
« no previous file with comments | « tools/testing/perf_testing/index.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698