options = new HashMap<>();
+ options.put("widths", Arrays.asList(375, 1280));
+ mockedPercy.captureResponsiveDom(mockedDriver, new HashSet<>(), options);
+
+ // driver.navigate().refresh() must be called once per captured width.
+ verify(navigation, times(2)).refresh();
+ } finally {
+ setStaticField(Percy.class, "PERCY_SERVER_ADDRESS", originalAddress);
+ setStaticField(Percy.class, "PERCY_RESPONSIVE_CAPTURE_RELOAD_PAGE", originalReloadFlag);
+ server.stop(0);
+ }
+ }
+
+ private static Object invokePrivate(Object target, String methodName, Class>[] paramTypes, Object... args)
+ throws Exception {
+ Method method = Percy.class.getDeclaredMethod(methodName, paramTypes);
+ method.setAccessible(true);
+ return method.invoke(target, args);
+ }
+
+ private static void setField(Object target, String fieldName, Object value) throws Exception {
+ Field field = Percy.class.getDeclaredField(fieldName);
+ field.setAccessible(true);
+ field.set(target, value);
+ }
+
+ private static void setStaticField(Class> clazz, String fieldName, Object value) throws Exception {
+ Field field = clazz.getDeclaredField(fieldName);
+ field.setAccessible(true);
+ field.set(null, value);
+ }
+
+ private static String getStaticStringField(Class> clazz, String fieldName) throws Exception {
+ Field field = clazz.getDeclaredField(fieldName);
+ field.setAccessible(true);
+ return (String) field.get(null);
+ }
+
+ private static boolean getStaticBooleanField(Class> clazz, String fieldName) throws Exception {
+ Field field = clazz.getDeclaredField(fieldName);
+ field.setAccessible(true);
+ return (boolean) field.get(null);
+ }
}
diff --git a/src/test/resources/testapp/cors-iframe.html b/src/test/resources/testapp/cors-iframe.html
new file mode 100644
index 0000000..f42e06b
--- /dev/null
+++ b/src/test/resources/testapp/cors-iframe.html
@@ -0,0 +1,16 @@
+
+
+
+
+ CORS Iframe Test
+
+
+
+ Page with cross-origin iframe
+ The iframe below loads an external origin and is used to test Percy CORS iframe capture.
+
+
+