Files

33 lines
1.9 KiB
Python
Raw Permalink Normal View History

"""Chromium isolation: exercise actual gallery controls / AJAX fallback; no live server."""
from pathlib import Path
import re,json
from playwright.sync_api import sync_playwright
ROOT=Path(__file__).resolve().parents[1]
original=(ROOT/'app/templates/theme-gallery.html').read_text(encoding='utf-8')
script=re.search(r'<script>(.*?)</script>',original,re.S).group(1)
source=original.replace('<script>'+script+'</script>','')
errors=[]
with sync_playwright() as p:
browser=p.chromium.launch(executable_path='/usr/bin/chromium',headless=True,args=['--no-sandbox','--disable-dev-shm-usage'])
page=browser.new_page(viewport={'width':1440,'height':900})
page.on('pageerror',lambda e:errors.append(str(e)))
page.set_content(source)
page.evaluate('''()=>{window.__galleryOk=true;window.fetch=async(url)=>{
const isPreview=String(url).includes('/preview?'),success=!isPreview||window.__galleryOk;
const data=[{version:'1.4.1'},{version:'1.4.0'}];
return {ok:success,status:success?200:503,headers:{get:()=>isPreview?'text/html':'application/json'},json:async()=>data};
}}''')
page.add_script_tag(content=script)
page.wait_for_function("document.querySelector('#preview').getAttribute('src')?.includes('page_type=home')")
assert page.locator('#version option').count()==3
page.evaluate('window.__galleryOk=false')
page.locator('#page').select_option('product')
page.wait_for_function("document.querySelector('#retryPreview').hidden===false")
assert '503' in page.locator('#previewStatus').inner_text()
assert 'page_type=product' in page.locator('#openPreview').get_attribute('href')
assert not errors,errors
page.set_viewport_size({'width':390,'height':844})
assert not page.evaluate('document.documentElement.scrollWidth>innerWidth+1')
browser.close()
print(json.dumps({'gallery_controls':True,'versions':True,'retry_error':True,'mobile390':True,'javascript_errors':errors},ensure_ascii=False))