Files
cms-SiteForge/scripts/browser_v832_gallery.py
T
浅念 95982fad23 upgrade: adopt V8.32.0-dev.1 (theme preview iframe fix, editor simple mode)
Overlay 46 upstream items; full patch set re-applied (all patched files
reset by overlay regardless of upstream change status — lesson recorded).
Verified: theme suites 35/35; dual-baseline 418 passed vs pristine
389+29 ours, FAILED-set diff EMPTY (same 10 Windows env fails).
Live: container 8.32.0-dev.1 healthy, hesupipe 192 entries intact,
trade-pro build 203 pages 0 errors.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-26 11:18:45 +08:00

33 lines
1.9 KiB
Python

"""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))