| OLD | NEW |
| 1 #!/usr/bin/python2.4 | 1 #!/usr/bin/python2.4 |
| 2 # Copyright 2009, Google Inc. | 2 # Copyright 2009, Google Inc. |
| 3 # All rights reserved. | 3 # All rights reserved. |
| 4 # | 4 # |
| 5 # Redistribution and use in source and binary forms, with or without | 5 # Redistribution and use in source and binary forms, with or without |
| 6 # modification, are permitted provided that the following conditions are | 6 # modification, are permitted provided that the following conditions are |
| 7 # met: | 7 # met: |
| 8 # | 8 # |
| 9 # * Redistributions of source code must retain the above copyright | 9 # * Redistributions of source code must retain the above copyright |
| 10 # notice, this list of conditions and the following disclaimer. | 10 # notice, this list of conditions and the following disclaimer. |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 """Utility scripts for selenium. | 32 """Utility scripts for selenium. |
| 33 | 33 |
| 34 A collection of utility scripts for selenium test cases to use. | 34 A collection of utility scripts for selenium test cases to use. |
| 35 """ | 35 """ |
| 36 | 36 |
| 37 | 37 |
| 38 import os | 38 import os |
| 39 import re | 39 import re |
| 40 import time | 40 import time |
| 41 import unittest | 41 import unittest |
| 42 import base64 |
| 42 import gflags | 43 import gflags |
| 43 import selenium_constants | 44 import selenium_constants |
| 44 | 45 |
| 45 | 46 |
| 46 FLAGS = gflags.FLAGS | 47 FLAGS = gflags.FLAGS |
| 47 SUFFIXES = ["small", "medium", "large"] | 48 SUFFIXES = ["small", "medium", "large"] |
| 48 | 49 |
| 49 | 50 |
| 50 def IsValidTestType(test_type): | 51 def IsValidTestType(test_type): |
| 51 """Returns True if test_type is a "small", "medium" or "large".""" | 52 """Returns True if test_type is a "small", "medium" or "large".""" |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 (selenium_constants.RESIZE_WIDTH, | 168 (selenium_constants.RESIZE_WIDTH, |
| 168 selenium_constants.RESIZE_HEIGHT)) | 169 selenium_constants.RESIZE_HEIGHT)) |
| 169 | 170 |
| 170 # Execute screenshot capture code | 171 # Execute screenshot capture code |
| 171 | 172 |
| 172 # Replace all backslashes with forward slashes so it is parsed correctly | 173 # Replace all backslashes with forward slashes so it is parsed correctly |
| 173 # by Javascript | 174 # by Javascript |
| 174 full_path = filename.replace("\\", "/") | 175 full_path = filename.replace("\\", "/") |
| 175 | 176 |
| 176 # Attempt to take a screenshot of the display buffer | 177 # Attempt to take a screenshot of the display buffer |
| 177 eval_string = ("%s.saveScreen('%s')" % (client, full_path)) | 178 eval_string = ("%s.toDataURL()" % client) |
| 179 |
| 178 | 180 |
| 179 # Set Post render call back to take screenshot | 181 # Set Post render call back to take screenshot |
| 180 script = ["window.g_selenium_post_render = false;", | 182 script = ["window.g_selenium_post_render = false;", |
| 181 "window.g_selenium_save_screen_result = false;", | 183 "window.g_selenium_save_screen_result = false;", |
| 182 "var frameCount = 0;", | 184 "var frameCount = 0;", |
| 183 "%s.setPostRenderCallback(function() {" % client, | 185 "%s.setPostRenderCallback(function() {" % client, |
| 184 " ++frameCount;", | 186 " ++frameCount;", |
| 185 " if (frameCount >= 3) {", | 187 " if (frameCount >= 3) {", |
| 186 " %s.clearPostRenderCallback();" % client, | 188 " %s.clearPostRenderCallback();" % client, |
| 187 " window.g_selenium_save_screen_result = %s;" % eval_string, | 189 " window.g_selenium_save_screen_result = %s;" % eval_string, |
| 188 " window.g_selenium_post_render = true;", | 190 " window.g_selenium_post_render = true;", |
| 189 " } else {", | 191 " } else {", |
| 190 " %s.render()" % client, | 192 " %s.render()" % client, |
| 191 " }", | 193 " }", |
| 192 "})", | 194 "})", |
| 193 "%s.render()" % client] | 195 "%s.render()" % client] |
| 194 session.run_script("\n".join(script)) | 196 session.run_script("\n".join(script)) |
| 195 # Wait for screenshot to be taken. | 197 # Wait for screenshot to be taken. |
| 196 session.wait_for_condition("window.g_selenium_post_render", 20000) | 198 session.wait_for_condition("window.g_selenium_post_render", 20000) |
| 197 | 199 |
| 198 # Get result | 200 # Get result |
| 199 success = session.get_eval("window.g_selenium_save_screen_result") | 201 data_url = session.get_eval("window.g_selenium_save_screen_result") |
| 200 | 202 expected_header = "data:image/png;base64," |
| 201 if success == u"true": | 203 if data_url.startswith(expected_header): |
| 204 png = base64.b64decode(data_url[len(expected_header):]) |
| 205 file = open(full_path + ".png", 'wb') |
| 206 file.write(png) |
| 207 file.close() |
| 202 print "Saved screenshot %s." % full_path | 208 print "Saved screenshot %s." % full_path |
| 203 return True | 209 return True |
| 204 | 210 |
| 205 return False | 211 return False |
| 206 | 212 |
| 207 | 213 |
| 208 class SeleniumTestCase(unittest.TestCase): | 214 class SeleniumTestCase(unittest.TestCase): |
| 209 """Wrapper for TestCase for selenium.""" | 215 """Wrapper for TestCase for selenium.""" |
| 210 | 216 |
| 211 def __init__(self, name, session, browser, test_type=None, sample_path=None, | 217 def __init__(self, name, session, browser, test_type=None, sample_path=None, |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 295 # if they are animated we need to stop the animation and set the clock | 301 # if they are animated we need to stop the animation and set the clock |
| 296 # to some time so we get a known state. | 302 # to some time so we get a known state. |
| 297 self.session.run_script("g_timeMult = 0") | 303 self.session.run_script("g_timeMult = 0") |
| 298 self.session.run_script("g_clock = " + clock) | 304 self.session.run_script("g_clock = " + clock) |
| 299 | 305 |
| 300 # take a screenshot. | 306 # take a screenshot. |
| 301 screenshot = self.sample_path.replace("/", "_") + str(screenshot_id) | 307 screenshot = self.sample_path.replace("/", "_") + str(screenshot_id) |
| 302 self.assertTrue(TakeScreenShot(self.session, self.browser, | 308 self.assertTrue(TakeScreenShot(self.session, self.browser, |
| 303 client, screenshot)) | 309 client, screenshot)) |
| 304 screenshot_id += 1 | 310 screenshot_id += 1 |
| OLD | NEW |