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 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)
def main( testname, url, filename, postdata=None, record=False, rerecord=False, sleepfactor=1.0, browser='firefox', remote=None, local=None, diffcolor='0,255,0', screensize='1024x768', autorerecord=False, save_diff=False): if postdata: if postdata == '-': postdata = sys.stdin.read() else: with open(postdata, 'r') as f: postdata = json.loads(f.read()) try: if remote: d = webdriver.Remote(remote, CAPABILITIES[browser]) else: d = DRIVERS[browser]() screensize = tuple(int(x) for x in screensize.split('x')) except KeyError: raise ValueError( '[%s] Invalid browser %r; valid browsers are %r.' % (testname, browser, DRIVERS.keys()) ) try: os.makedirs(filename) except: pass diffcolor = tuple(int(x) for x in diffcolor.split(',')) jsonfile = os.path.join(filename, 'record.json') with contextlib.closing(d): if record: if local: local_d = webdriver.Remote(local, CAPABILITIES[browser]) else: local_d = d with contextlib.closing(local_d): with open(jsonfile, 'w') as f: f.write( jsonpickle.encode( TestRun.record(local_d, d, (url, postdata), screensize, filename, diffcolor, sleepfactor, save_diff) ) ) print 'Test recorded successfully' return 0 elif rerecord: with open(jsonfile, 'r') as f: TestRun.rerecord(jsonpickle.decode(f.read()), filename, (url, postdata), d, sleepfactor, diffcolor, save_diff) print 'Test rerecorded successfully' return 0 elif autorerecord: with open(jsonfile, 'r') as f: test = jsonpickle.decode(f.read()) try: print 'Running test to determine if we need to rerecord' TestRun.playback(test, filename, (url, postdata), d, sleepfactor, diffcolor, save_diff) print 'Test played back successfully' return 0 except TestError: print 'Test failed, rerecording...' TestRun.rerecord(test, filename, (url, postdata), d, sleepfactor, diffcolor, save_diff) print 'Test rerecorded successfully' return 2 else: with open(jsonfile, 'r') as f: TestRun.playback(jsonpickle.decode(f.read()), filename, (url, postdata), d, sleepfactor, diffcolor, save_diff) print 'Test played back successfully' return 0
def main(url, filename, postdata=None, record=False, rerecord=False, sleepfactor=1.0, browser='firefox', remote=None, local=None, diffcolor='0,255,0', screensize='1024x768', autorerecord=False, save_diff=False, his_mode=False): print "start time:%s..." % TestRunStartTime().get_start_time().strftime( '%Y-%m-%d %H:%M:%S') if postdata: if postdata == '-': postdata = sys.stdin.read() else: with open(postdata, 'r') as f: postdata = json.loads(f.read()) try: if remote: d = webdriver.Remote(remote, CAPABILITIES[browser]) else: d = DRIVERS[browser]() screensize = tuple(int(x) for x in screensize.split('x')) except KeyError: raise ValueError('Invalid browser %r; valid browsers are %r.' % (browser, DRIVERS.keys())) try: os.makedirs(filename) except: pass diffcolor = tuple(int(x) for x in diffcolor.split(',')) jsonfile = os.path.join(filename, 'record.json') try: if record: if local: local_d = webdriver.Remote(local, CAPABILITIES[browser]) else: local_d = d with contextlib.closing(local_d): with open(jsonfile, 'w') as f: f.write( jsonpickle.encode( TestRun.record(local_d, d, (url, postdata), screensize, filename, diffcolor, sleepfactor, save_diff, his_mode))) print 'Test recorded successfully' return 0 elif rerecord: with open(jsonfile, 'r') as f: TestRun.rerecord(jsonpickle.decode(f.read()), filename, (url, postdata), d, sleepfactor, diffcolor, save_diff, his_mode) print 'Test rerecorded successfully' return 0 elif autorerecord: with open(jsonfile, 'r') as f: test = jsonpickle.decode(f.read()) try: print 'Running test to determine if we need to rerecord' TestRun.playback(test, filename, (url, postdata), d, sleepfactor, diffcolor, save_diff, his_mode) print 'Test played back successfully' return 0 except TestError: print 'Test failed, rerecording...' TestRun.rerecord(test, filename, (url, postdata), d, sleepfactor, diffcolor, save_diff, his_mode) print 'Test rerecorded successfully' return 2 else: with open(jsonfile, 'r') as f: TestRun.playback(jsonpickle.decode(f.read()), filename, (url, postdata), d, sleepfactor, diffcolor, save_diff, his_mode) print 'Test played back successfully' return 0 finally: try: d.close() except UnexpectedAlertPresentException: print "auto accept alert" alert = d.switch_to_alert() alert.accept()
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 main(testname, url, filename, postdata=None, record=False, rerecord=False, sleepfactor=1.0, browser='firefox', remote=None, local=None, diffcolor='0,255,0', screensize='1024x768', autorerecord=False, save_diff=False): if postdata: if postdata == '-': postdata = sys.stdin.read() else: with open(postdata, 'r') as f: postdata = json.loads(f.read()) try: if remote: d = webdriver.Remote(remote, CAPABILITIES[browser]) else: d = DRIVERS[browser]() screensize = tuple(int(x) for x in screensize.split('x')) except KeyError: raise ValueError('[%s] Invalid browser %r; valid browsers are %r.' % (testname, browser, DRIVERS.keys())) try: os.makedirs(filename) except: pass diffcolor = tuple(int(x) for x in diffcolor.split(',')) jsonfile = os.path.join(filename, 'record.json') with contextlib.closing(d): if record: if local: local_d = webdriver.Remote(local, CAPABILITIES[browser]) else: local_d = d with contextlib.closing(local_d): with open(jsonfile, 'w') as f: f.write( jsonpickle.encode( TestRun.record(local_d, d, (url, postdata), screensize, filename, diffcolor, sleepfactor, save_diff))) print 'Test recorded successfully' return 0 elif rerecord: with open(jsonfile, 'r') as f: TestRun.rerecord(jsonpickle.decode(f.read()), filename, (url, postdata), d, sleepfactor, diffcolor, save_diff) print 'Test rerecorded successfully' return 0 elif autorerecord: with open(jsonfile, 'r') as f: test = jsonpickle.decode(f.read()) try: print 'Running test to determine if we need to rerecord' TestRun.playback(test, filename, (url, postdata), d, sleepfactor, diffcolor, save_diff) print 'Test played back successfully' return 0 except TestError: print 'Test failed, rerecording...' TestRun.rerecord(test, filename, (url, postdata), d, sleepfactor, diffcolor, save_diff) print 'Test rerecorded successfully' return 2 else: with open(jsonfile, 'r') as f: TestRun.playback(jsonpickle.decode(f.read()), filename, (url, postdata), d, sleepfactor, diffcolor, save_diff) print 'Test played back successfully' return 0