common.py (2655B)
1 GPT_SHIM_MSG = "Google Publisher Tags is being shimmed by Firefox" 2 GAGTA_SHIM_MSG = "Google Analytics and Tag Manager is being shimmed by Firefox" 3 4 5 async def is_gtag_placeholder_displayed(client, url, finder, **kwargs): 6 await client.navigate(url, **kwargs) 7 client.execute_async_script( 8 """ 9 const done = arguments[0]; 10 if (window.dataLayer?.push?.toString() === [].push.toString()) { 11 return done(); 12 } 13 setTimeout(() => { 14 dataLayer.push({ 15 event: "datalayerReady", 16 eventTimeout: 1, 17 eventCallback: done, 18 }); 19 }, 100); 20 """ 21 ) 22 return client.is_displayed(client.find_element(finder)) 23 24 25 async def clicking_link_navigates(client, url, finder, **kwargs): 26 await client.navigate(url, **kwargs) 27 elem = client.await_element(finder) 28 return client.session.execute_async_script( 29 """ 30 const elem = arguments[0], 31 done = arguments[1]; 32 window.onbeforeunload = function() { 33 done(true); 34 }; 35 elem.click(); 36 setTimeout(() => { 37 done(false); 38 }, 1000); 39 """, 40 args=[elem], 41 ) 42 43 44 async def verify_redirectors(client, urls, expected="REDIRECTED"): 45 await client.navigate(client.inline("<html>")) 46 for url, type in urls.items(): 47 assert expected == client.execute_async_script( 48 """ 49 const [url, type, resolve] = arguments; 50 fetch(url).then(async response => { 51 if (!response.ok) { 52 return resolve("FAILED"); 53 } 54 55 try { 56 if (type === "image") { 57 const blob = await response.blob(); 58 const url = URL.createObjectURL(blob); 59 const img = new Image(1, 1); 60 await new Promise((res, rej) => { 61 img.onerror = rej; 62 img.onload = res; 63 img.src = url; 64 }); 65 } else if (type === "js") { 66 const text = await response.text(); 67 if (!text.includes("This script is intentionally empty")) { 68 throw ""; 69 } 70 } else { 71 return resolve("UNKNOWN TYPE"); 72 } 73 } catch(_) { 74 return resolve("TYPE MISMATCH"); 75 } 76 77 resolve(response.redirected ? "REDIRECTED" : "LOADED"); 78 }).catch(_ => { 79 resolve("BLOCKED"); 80 }); 81 """, 82 url, 83 type, 84 )