"""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'',original,re.S).group(1) source=original.replace('','') 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))