Spaces:
Running
Running
File size: 4,533 Bytes
7c9e8d9 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | from playwright.sync_api import sync_playwright
import json,os,re
BASE=os.path.dirname(os.path.abspath(__file__))
html=open(BASE+'/index.html').read()
html=re.sub(r'<link rel="stylesheet"[^>]*>', '', html)
html=re.sub(r'<script src="[^"]+" defer></script>', '', html)
css=open(BASE+'/styles.css').read()
engine=open(BASE+'/engine.js').read()
app=open(BASE+'/app.js').read()
data={x:json.load(open(BASE+'/'+x)) for x in ['train.json','iid_test.json','challenge.json']}
def initialize(page):
page.set_content(html,wait_until='load')
page.add_style_tag(content=css)
page.evaluate('data => { window.fetch = async (url) => ({ok:true, json:async()=>data[url.replace("./","")]}); }',data)
page.add_script_tag(content=engine)
page.add_script_tag(content=app)
errs=[]
with sync_playwright() as p:
browser=p.chromium.launch(headless=True, executable_path='/usr/bin/chromium',args=['--no-sandbox','--disable-dev-shm-usage'])
page=browser.new_page(viewport={'width':1440,'height':1040},accept_downloads=True)
page.on('pageerror',lambda e: errs.append(str(e)))
initialize(page)
page.wait_for_function("document.querySelector('#status').textContent.includes('Ready.')",timeout=30000)
print('01 Boot ready:',page.locator('#status').inner_text())
print('02 Best challenge:',page.locator('#kpis').inner_text().replace('\n',' ')[:120])
assert page.locator('#leaderboard .bar-row').count()==4
assert page.locator('#confusion tbody tr').count()==6
page.locator('#overviewSplit').select_option('iid')
assert '130' in page.locator('#kpis').inner_text()
print('03 130 IID data loaded')
page.locator('button[data-tab="experiments"]').click()
page.locator('#runSeed').fill('2026')
page.locator('#runReps').select_option('200')
page.locator('#runButton').click()
assert page.locator('#experimentOutput tbody tr').count()==4
assert page.locator('#historyList tbody tr').count()>=1
print('04 Experiment runner + history PASS')
page.locator('button[data-tab="slices"]').click()
assert page.locator('#languageSlices tbody tr').count()==3
page.locator('#sliceSplit').select_option('iid')
assert page.locator('#domainSlices tbody tr').count()>=3
print('05 Language and domain slices PASS')
page.locator('button[data-tab="errors"]').click()
assert 'errors in 54' in page.locator('#errorsList').inner_text()
page.locator('#errorSearch').fill('method')
print('06 Error inspector and search PASS')
page.locator('#sampleText').fill('This study seeks to evaluate the effects of technology on learning.')
page.locator('#classifyButton').click()
assert 'PREDICTED RHETORICAL FUNCTION' in page.locator('#sampleOutput').inner_text()
print('07 Sample inference PASS')
page.locator('button[data-tab="shift"]').click()
assert page.locator('#shiftGrid tbody tr').count()==4
print('08 Shift comparison PASS')
page.locator('button[data-tab="audit"]').click()
assert 'PASS' in page.locator('#leakageChecks').inner_text()
print('09 Data audit PASS')
page.locator('button[data-tab="exports"]').click()
for button in ['downloadPred','downloadMetrics','downloadReport','downloadRuns']:
with page.expect_download(timeout=10000) as d:
page.locator('#'+button).click()
download=d.value
print('10 Download',download.suggested_filename,'PASS')
# screenshot at overview after setup
page.locator('button[data-tab="overview"]').click()
page.locator('#overviewSplit').select_option('challenge')
page.screenshot(path=os.path.join(BASE,'ModelOps_Research_Lab_DESKTOP_PREVIEW.png'),full_page=True)
print('11 Desktop screenshot PASS')
# Mobile responsive
mobile=browser.new_page(viewport={'width':390,'height':844},device_scale_factor=1)
mobile.on('pageerror',lambda e: errs.append(str(e)))
initialize(mobile)
mobile.wait_for_function("document.querySelector('#status').textContent.includes('Ready.')",timeout=30000)
mobile.screenshot(path=os.path.join(BASE,'ModelOps_Research_Lab_MOBILE_PREVIEW.png'),full_page=True)
width=mobile.evaluate('document.documentElement.scrollWidth')
print('12 Mobile viewport scroll width:',width)
assert width<=400, 'mobile horizontal overflow on document'
mobile.locator('button[data-tab="slices"]').click()
assert mobile.locator('#languageSlices tbody tr').count()==3
print('13 Mobile interface PASS')
print('14 JavaScript errors:',errs)
assert not errs
browser.close()
|