def rerecord(cls, test, path, url, d, sleepfactor, diffcolor, save_diff): print 'Begin rerecord' run = TestRun(test, path, url, d, TestRunModes.RERECORD, diffcolor, save_diff) run._playback(sleepfactor) print print 'Playing back to ensure the test is correct' print cls.playback(test, path, url, d, sleepfactor, diffcolor, save_diff)
def record(cls, d, remote_d, url, screen_size, path, diffcolor, sleepfactor, save_diff): print 'Begin record' try: os.makedirs(path) except: pass test = Test(screen_size) run = TestRun(test, path, url, d, TestRunModes.RECORD, diffcolor, save_diff) d.set_window_size(*screen_size) navigate(d, url) start_time = d.execute_script('return +new Date();') d.execute_script(''' (function() { var events = []; window.addEventListener('click', function (e) { events.push([+new Date(), 'click', [e.clientX, e.clientY]]); }, true); window.addEventListener('keyup', function (e) { events.push([+new Date(), 'keyup', String.fromCharCode(e.keyCode)]); }, true); window._getHuxleyEvents = function() { return events; }; })(); ''') steps = [] while True: if len( raw_input( "Press enter to take a screenshot, or type Q+enter if you're done\n" )) > 0: break screenshot_step = ScreenshotTestStep( d.execute_script('return Date.now();') - start_time, run, len(steps)) run.d.save_screenshot(screenshot_step.get_path(run)) steps.append(screenshot_step) print len(steps), 'screenshots taken' # now capture the events try: events = d.execute_script('return window._getHuxleyEvents();') except: raise TestError( 'Could not call window._getHuxleyEvents(). ' + 'This usually means you navigated to a new page, which is currently unsupported.' ) for (timestamp, type, params) in events: if type == 'click': steps.append(ClickTestStep(timestamp - start_time, params)) elif type == 'keyup': steps.append(KeyTestStep(timestamp - start_time, params)) steps.sort(key=operator.attrgetter('offset_time')) test.steps = steps print raw_input( 'Up next, we\'ll re-run your actions to generate screenshots ' + 'to ensure they are pixel-perfect when running automated. ' + 'Press enter to start.') print cls.rerecord(test, path, url, remote_d, sleepfactor, diffcolor, save_diff) return test
def playback(cls, test, path, url, d, sleepfactor, diffcolor, save_diff): print 'Begin playback' run = TestRun(test, path, url, d, TestRunModes.PLAYBACK, diffcolor, save_diff) run._playback(sleepfactor)