def Screenshot(self, timeout): assert self.screenshot_supported, 'Browser does not support screenshotting' self.EvaluateJavaScript(""" if(!window.__telemetry) { window.__telemetry = {} } window.__telemetry.snapshotComplete = false; window.__telemetry.snapshotData = null; window.chrome.gpuBenchmarking.beginWindowSnapshotPNG( function(snapshot) { window.__telemetry.snapshotData = snapshot; window.__telemetry.snapshotComplete = true; } ); """) def IsSnapshotComplete(): return self.EvaluateJavaScript( 'window.__telemetry.snapshotComplete') util.WaitFor(IsSnapshotComplete, timeout) snap = self.EvaluateJavaScript(""" (function() { var data = window.__telemetry.snapshotData; delete window.__telemetry.snapshotComplete; delete window.__telemetry.snapshotData; return data; })() """) if snap: return image_util.FromBase64Png(snap['data']) return None
def CaptureScreenshot(self, timeout=60): request = {'method': 'Page.captureScreenshot'} # "Google API are missing..." infobar might cause a viewport resize # which invalidates screenshot request. See crbug.com/459820. for _ in range(2): res = self._inspector_websocket.SyncRequest(request, timeout) if res and ('result' in res) and ('data' in res['result']): return image_util.FromBase64Png(res['result']['data']) return None
def testReadFromBase64Png(self): bmp = image_util.FromBase64Png(test_png) self.assertEquals(2, image_util.Width(bmp)) self.assertEquals(2, image_util.Height(bmp)) image_util.GetPixelColor(bmp, 0, 0).AssertIsRGB(255, 0, 0) image_util.GetPixelColor(bmp, 1, 1).AssertIsRGB(0, 255, 0) image_util.GetPixelColor(bmp, 0, 1).AssertIsRGB(0, 0, 255) image_util.GetPixelColor(bmp, 1, 0).AssertIsRGB(255, 255, 0)
def testIsEqual(self): bmp = image_util.FromBase64Png(test_png) file_bmp = image_util.FromPngFile(test_png_path) self.assertTrue(image_util.AreEqual(bmp, file_bmp, likely_equal=True))