"""Read-only browser acceptance for the local release planner simulation.""" import json from pathlib import Path import urllib.request from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.firefox.options import Options from selenium.webdriver.firefox.service import Service from selenium.webdriver.support.ui import WebDriverWait BASE='http://127.0.0.1:8088';ROOT=Path(__file__).resolve().parents[1] options=Options();options.add_argument('--headless');options.binary_location='/snap/firefox/current/usr/lib/firefox/firefox' driver=webdriver.Firefox(options=options,service=Service('/snap/bin/geckodriver'));driver.set_window_size(1440,1000);wait=WebDriverWait(driver,30,poll_frequency=.1) def body():return driver.find_element(By.TAG_NAME,'body').text def fits():assert driver.execute_script('return document.documentElement.scrollWidth<=window.innerWidth') try: driver.get(BASE);wait.until(lambda d:d.find_element(By.TAG_NAME,'h1').text=='来源与目录');driver.find_element(By.XPATH,"//nav//button[contains(.,'发布管理')]").click();wait.until(lambda d:d.find_element(By.TAG_NAME,'h1').text=='发布管理') for expected in ['本地模拟发布准备','1. 选择文档','2. 检查数据闭包','3. 锁定清单','4. 生产负责人授权','[模拟] CR5用户手册.pdf','[模拟] 产品参数总表.xlsx','图谱 共享','[模拟] CRA-IP68产品介绍.pdf','生产发布已关闭','生产备份到OSS:尚未配置']: assert expected in body() boxes=driver.find_elements(By.CSS_SELECTOR,'.release-candidate input[type="checkbox"]');assert len(boxes)==3 and boxes[2].get_attribute('disabled') boxes[0].click();wait.until(lambda d:'文档级同步' in d.find_element(By.CSS_SELECTOR,'.release-mode').text) driver.find_element(By.XPATH,"//button[.='生成模拟清单']").click();wait.until(lambda d:'模拟清单已生成' in body()) boxes=driver.find_elements(By.CSS_SELECTOR,'.release-candidate input[type="checkbox"]');boxes[1].click();wait.until(lambda d:'整知识库同步' in d.find_element(By.CSS_SELECTOR,'.release-mode').text) assert '不会覆盖整个WeKnora数据库' in body() driver.find_element(By.XPATH,"//button[.='清空选择']").click();wait.until(lambda d:'尚未选择' in d.find_element(By.CSS_SELECTOR,'.release-mode').text) assert not driver.find_elements(By.XPATH,"//button[.='授权生产发布']") capabilities=json.load(urllib.request.urlopen(BASE+'/api/v1/release-capabilities',timeout=10))['data'];assert capabilities['production_release_requests_enabled'] is False for width in (1440,1024,768):driver.set_window_size(width,900);fits() driver.set_window_size(1440,1000);driver.get_full_page_screenshot_as_file(str(ROOT/'tmp/RELEASE_PLANNER_SIMULATION_FIREFOX.png')) result={'mode':'simulation','candidates':3,'document_plan':'pass','knowledge_base_fallback':'pass','failed_blocked':'pass','four_steps':'pass','production_release_requests_enabled':False,'root_overflow':False,'external_write_requests':0} (ROOT/'tmp/release-planner-simulation-acceptance.json').write_text(json.dumps(result,ensure_ascii=False,indent=2));print(json.dumps(result,ensure_ascii=False)) finally:driver.quit()