#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 직접 JavaScript 함수 호출 테스트 """ from playwright.sync_api import sync_playwright import time def test_direct_load(): with sync_playwright() as p: browser = p.chromium.launch(headless=True) page = browser.new_page() print("페이지 로드 중...") page.goto("http://localhost:5001") page.wait_for_load_state("networkidle") time.sleep(2) # 직접 입고 관리 탭 활성화 및 함수 호출 print("\n입고 데이터 직접 로드...") page.evaluate(""" // 입고 탭 표시 document.querySelectorAll('.tab-pane').forEach(pane => pane.classList.remove('show', 'active')); document.querySelector('#purchase').classList.add('show', 'active'); // 직접 함수 호출 if (typeof loadPurchaseReceipts === 'function') { loadPurchaseReceipts(); } else { console.error('loadPurchaseReceipts 함수를 찾을 수 없습니다'); } """) time.sleep(2) # 테이블 내용 확인 table_html = page.inner_html('#purchaseReceiptsList') print(f"\n테이블 내용 (처음 500자):\n{table_html[:500]}") # 테이블 행 수 확인 row_count = page.evaluate("document.querySelectorAll('#purchaseReceiptsList tr').length") print(f"\n테이블 행 수: {row_count}") # 첫 번째 행 내용 확인 if row_count > 0: first_row = page.evaluate(""" const row = document.querySelector('#purchaseReceiptsList tr'); if (row) { const cells = row.querySelectorAll('td'); return Array.from(cells).map(cell => cell.textContent.trim()); } return null; """) if first_row: print(f"\n첫 번째 행 데이터:") headers = ['입고일', '공급업체', '품목 수', '총 금액', '총 수량', '파일명', '작업'] for i, value in enumerate(first_row[:-1]): # 마지막 '작업' 열 제외 if i < len(headers): print(f" {headers[i]}: {value}") # 스크린샷 page.screenshot(path="/root/kdrug/direct_test.png") print("\n스크린샷 저장: /root/kdrug/direct_test.png") browser.close() if __name__ == "__main__": test_direct_load()