
    ii)H                     \    d Z ddlZddlZddlmZ dZdZg Zg Zd	dZ	d Z
edk(  r e
        yy)
u   
Argos QA Tester - Naver Blog Keyword Analysis Feature Test (FINAL)
Tests the complete 키워드분석 workflow on the 네이버블로그 tab
    N)sync_playwrightz8/home/jay/workspace/memory/reports/task-1933-screenshotsz http://localhost:8000/dashboard/c                     ddddj                  | d      }| d| }|r|d| z  }t        |       t        j                  | ||d       y )	N[PASS][FAIL][WARN]PASSFAILWARN[INFO] u    — )statustestdetail)getprintresultsappend)r   	test_namer   iconmsgs        L/home/jay/workspace/memory/reports/task-1933-screenshots/03_keyword_final.py
log_resultr      sY    hAEEfhWDF!I;
Cvh	#JNNfi6JK    c                    # t               5 } | j                  j                  d      }|j                  ddd      }|j	                         }d }d }|j                  d	|       |j                  d
|       t        d       |j                  t        d       |j                  d       |j                  t         d       t        dd|j                         t        d       	 |j                  d      j                  }|j!                  dd       |j#                          t        ddd       |j                  d       |j                  t         d       t        d       	 |j)                  dd      }|j+                         dkD  rT|j                  j-                  d !      r8|j                  j#                          |j                  d"       t        dd#       ni|j/                  d      j                  }	|	j-                  d"!      r/|	j#                          |j                  d"       t        dd#d$       nt        d%d&d'       |j                  t         d(       t        d)       	 |j                  d*      j                  }
|
j!                  dd       |
j#                          |
j1                  d+       |
j1                  d,       |
j3                  d-       |
j5                         }d-|v rt        dd.d/| d0       nt        dd.d1| d0       |j                  t         d2       t        d3       	 |j                  d4      j                  }|j!                  dd       |j                  d*      j                  j5                         }t        d5| d0       |j#                          t        dd6d7| d0       |j                  d"       |j                  t         d8       t        d9       d:}d:}d;}d;}t7        d<      D ]  }t9        j:                  d=       |d>z   d=z  }t        d?| d@|d>z    dA       	 |j                  dB      j=                  d"!      }g dC}|D ]$  }||v sd}dD| d0}t        ddEd0| dF| dG        n |r n3d-|v r|j?                  d-      }|tA        d|dHz
        |dIz    }t        dJtC        |d dK               dL|v sd-|v rdM|vrdN|vrd}dO}t        ddPdQ| dG        ndR|v sdM|v sdN|v r*|jE                         }d}t        ddSdT| dU|d dK          n|j                  dV      j+                         }|dkD  rd}dW| dX}t        ddY| dZ| dG        nQ|j                  d[      }|j+                         dkD  r*	 |j                  j-                  dI!      }|rt        d\        |j                  t         d^       |s|s	 |j                  dB      j=                  d !      }t        d_       t        |d d"        t        d`       |jG                  da      }|r9t        db       |D ](  }t        dc|dd    de|df    dgtC        |dh                 * nt        di       tH        D cg c]  }dj|dk   v s| }}|r-t        dltK        |              |D ]  }t        dm|         nt        dn       t        d%dodp       |rt        dr       |j                  dV      }|j+                         } t        ds|         | dkD  r|j                  dt      jM                         }!t        |!rdnd%dudv|!d dw         dxdydzd{d|d}}"|"jO                         D ##$cg c]  \  #}$tQ        #fd~|!D              s|$ }%}#}$|%rt        dd|%        nt        d%dd|!d d         d:}&t7        tS        tK        |!      d            D ]  }'	 |j                  dt      jU                  |'      }(|(j-                  d!      rK|!|'   jE                         r8|(j#                          |j                  d"       d}&t        dd|!|'    d        n |&st        d%dd       |j                  t         d       t        d       |j                  d      })|)j+                         }*|*dkD  r>	 |)j                  j#                          |j                  d       t        ddd|* d       nt        d%dd       |j                  t         d       t        d       n|j                  d      }+|+j+                         },t        |,dkD  rdnd%d|, d       |,dkD  rZ|+j                  j#                          |j                  d       |j                  t         d       n|rt        ddd|d dI         t        d       tH        D cg c]  }dj|dk   v s| }-}|-r|-D ]  }t'        |jW                  dd            }.|.jY                         rt[        |.      dk  rdndnd}/t        d?|d   j]                          d|jW                  dd;       d|dk    dd|v r|.nd;         |-D cg c]  }d|dk   v sd|dk   v r| }0}|0rt        ddtK        |0       d       n>|-D cg c]  }d|dk   v s| }1}t        d%ddtK        |1              nt        d%dd       |j                  t         d       t        d       |j_                          d d d        t        d       t        d       t        d       ta        d tb        D              }2ta        d tb        D              }3ta        d tb        D              }4t        d|2 d|3 d|4 dtK        tb               d	       t        d       tb        D ]  }5ddddjW                  |5d   d      }/t        d|/ d|5d           |5d   s6|5d   je                  d      }6|6d d D ]/  }7|7jE                         st        d|7jE                                 1  t        d       y # t$        $ r!}t        ddt'        |             Y d }~Cd }~ww xY w# t$        $ r!}t        d%d&t'        |             Y d }~
Wd }~ww xY w# t$        $ r!}t        dd.t'        |             Y d }~	d }~ww xY w# t$        $ r!}t        dd6t'        |             Y d }~	8d }~ww xY w# t$        $ r Y Jw xY w# t$        $ r}t        d]|        Y d }~	%d }~ww xY wc c}w # t$        $ r!}t        d%dqt'        |             Y d }~}d }~ww xY wc c}$}#w # t$        $ r Y w xY w# t$        $ r!}t        d%dt'        |             Y d }~d }~ww xY wc c}w c c}w c c}w # 1 sw Y   xY w)NT)headlessi  i  )widthheight)viewportc                     | j                   }d|v sd|j                         v r?t        j                  d| j                  |d       t        d| j                   d|        y y )N
naver-blogkeywordrequest)typemethodurlz
    [REQ] r   )r&   lower	api_callsr   r%   r   )r#   r&   s     r   
on_requestzrun_tests.<locals>.on_request    sY    ++Cs"i399;&>  )w~~VY!Z[
7>>"2!C59: '?r   c                 $   | j                   }d|v sd|j                         v r_| j                  }t        j	                  d||d       t        d| d|        |dk\  r#	 | j                         }t        d|d d	         y y y # t        $ r Y y w xY w)
Nr!   r"   response)r$   r   r&   z
    [RES] r     z    [ERR BODY] ,  )r&   r'   r   r(   r   r   text	Exception)r+   r&   r   bodys       r   on_responsezrun_tests.<locals>.on_response&   s    ,,Cs"i399;&>!  *s!ST
6(!C512S='}}Tc
|<= !	 '? % s   !B 	BBr#   r+   z9
=== [1] Navigate to http://localhost:8000/dashboard/ ===domcontentloaded)
wait_untili  z/03_keyword_01_loaded.png)pathr	   zDashboard navigationu)   
=== [2] Click 네이버블로그 tab ===u%   button:has-text('네이버블로그')visible)statetimeoutu   Click 네이버블로그 tabr
   i  z/03_keyword_02_tab_active.pngu6   
=== [3] Switch history to 키워드분석 sub-tab ===buttonu   키워드분석)namer   i  )r7   i  u)   Switch to 키워드분석 history sub-tabzvia get_by_textr   u   키워드분석 sub-tabzNot found or not visiblez/03_keyword_03_history.pngu1   
=== [4] Type '실손보험' in keyword input ===u2   input[placeholder*='키워드를 입력하세요']z	Control+aDeleteu   실손보험u   Type keyword '실손보험'zInput value confirmed: ''zValue was: 'z/03_keyword_04_typed.pngu    
=== [5] Click 분석 button ===u   button:has-text('분석')z  Input value before click: 'u   Click 분석 buttonzinput was: 'z/03_keyword_05_clicked.pngz0
=== [6] Polling for results (30s, every 2s) ===F          z  [zs] Polling attempt z/15...r0   )

relKeywordmonthlyPcQcCntmonthlyMobileQcCntcompIdx
plAvgDepthu   월간검색수u   PC검색량u   MO검색량u   연관키워드u   경쟁정도zkeyword data: 'z!Keyword analysis results appearedz' found in page at sP      u+       '실손보험' found in page. Context:    u   ✅u   실패u   오류u!   실손보험 in history (success)zKeyword analysis completedu#   실손보험 visible in history at u   ❌zKeyword analysis errorz	Error at zs: tableztable element (z tables)zResults table appearedz table(s) at z&[class*='spinner'], [class*='loading']z    Still loading...z    Poll error: z/03_keyword_06_results.pngz*
  --- Page text sample (chars 0-1000) ---z  ---a  
                    () => {
                        const all = document.querySelectorAll('*');
                        const interesting = [];
                        for (const el of all) {
                            const cls = el.className || '';
                            const txt = (el.innerText || '').trim().substring(0, 50);
                            if ((cls.includes('result') || cls.includes('keyword') ||
                                 cls.includes('table') || cls.includes('data')) && txt) {
                                interesting.push({
                                    tag: el.tagName,
                                    cls: typeof cls === 'string' ? cls.substring(0, 60) : '',
                                    txt: txt
                                });
                            }
                        }
                        return interesting.slice(0, 15);
                    }
                z7
  DOM elements with result/keyword/table/data classes:z    <tagz class='clsz'> txtz?
  No DOM elements with result/keyword/table/data classes foundr!   r&   z
  Naver Blog API calls made: z    z4
  No naver-blog API calls detected during analysis!z%Keyword analysis no results after 30sz*No keyword data, table, or result appearedzFinal state inspectionz.
=== [7] Testing table/result interactions ===z  Tables found: thzTable headersz	Headers: 
   u   연관 키워드u	   검색량u	   PC 검색u   모바일 검색u	   경쟁도)r@   searchVolumePCMOu   경쟁c              3   &   K   | ]  }|v  
 y w)N ).0hks     r   	<genexpr>zrun_tests.<locals>.<genexpr>  s     >T!qAv>Ts   zKeyword data columns presentzKeyword data columnszNot found in headers:       r-   zClick header 'z' for sortingzColumn header sortzNo clickable header foundz/03_keyword_07_sorted.pngz&  Screenshot: 03_keyword_07_sorted.pngztbody tri  zKeyword row selectionzClicked first of z rowszKeyword rowsztbody has 0 rowsz/03_keyword_08_selected.pngz(  Screenshot: 03_keyword_08_selected.pngz>[class*='result'] > *, [class*='keyword'] > *, [class*='item']zResult itemsz& result items found (non-table format)z/03_keyword_07_item_click.pngzKeyword analysis resultzError: z
=== [8] API Call Summary ===r   ?r,   OKERRr$   z] r%   r   analyzr"   zKeyword analysis API was calledz# calls to analyze/keyword endpointshistoryzNo analyze/keyword API callzOnly history calls: z No naver-blog API calls capturedzCheck network filterz/03_keyword_09_final.pngz,
  Final screenshot: 03_keyword_09_final.pngzB
=================================================================z.  FINAL QA REPORT: Naver Blog Keyword AnalysiszA=================================================================c              3   2   K   | ]  }|d    dk(  sd  yw)r   r	   r?   NrS   rT   rs     r   rW   zrun_tests.<locals>.<genexpr>r       =qq{f'<=   c              3   2   K   | ]  }|d    dk(  sd  yw)r   r
   r?   NrS   r`   s     r   rW   zrun_tests.<locals>.<genexpr>s  rb   rc   c              3   2   K   | ]  }|d    dk(  sd  yw)r   r   r?   NrS   r`   s     r   rW   zrun_tests.<locals>.<genexpr>t  rb   rc   z	
  PASS: z  |  FAIL: z  |  WARN: z  |  TOTAL: 
zA-----------------------------------------------------------------r   r   r   r   r   z  r   r      z           )3r   chromiumlaunchnew_contextnew_pageonr   gotoBASE_URLwait_for_timeout
screenshotSCREENSHOT_DIRr   r&   locatorfirstwait_forclickr/   strget_by_rolecount
is_visibleget_by_textpressfillinput_valuerangetimesleep
inner_textfindmaxreprstripevaluater(   lenall_text_contentsitemsanyminnthr   isdigitintupperclosesumr   split)8pbrowsercontextpager)   r1   tabe
kwd_subtabkwd_subtab2inpvalbtninp_valresult_founderror_found
error_textresult_typeattemptelapsed	body_textkwd_data_termstermidxctxtablesloadingvis	structurerE   ckwd_api_callstchdrskwd_colsrV   vfound	sort_doneirU   rowsrcresult_itemsicnaver_calls
status_strr   analyze_callshistory_callspass_cfail_cwarn_cra   detail_linesdls8                                      `                    r   	run_testsr      s=   		 Ra**##T#2%%/M%N!	;	 		:&
K( 	JK		('9	:d#//HIJ61488< 	:;	G,,FGMMCLLy$L7IIKv=?fg 	d#//LMN 	GH	B))(9J)KJ!A%**:*:*E*Ed*E*S  &&(%%d+6#NO #../@AGG))$)7%%'))$/v'RTefv'@B\] 	//IJK 	BC	F,,STZZCLLy$L7IIKIIk"IIhHH^$//#C$6#@D\]`\aabBcd6#@LQTPUUVBWX 	//GHI 	12		>,,:;AACLLy$L7ll#WX^^jjlG1'!<=IIKv4WIQ6OP 	d#//IJK 	AB
Ry ?	.GJJqM{a'GCy 3GAI;fEF:. LL0;;D;I	"
 + Dy('+(7vQ&?"6+N%&tf,?y#JL   "Y.#..8C#C3r6N3s7;CGSQURUYGXYZ|#(=(RUBUZbjmZm'+&I"6+G%H	QR#SU#SHO%(YY[
&*"6+C%.wis:ds;K:L#MO g.446A:#'L$3F88"DKv'?F8=Y`XaabAcd ,,'OP==?Q&%mm66s6C!$8:u?	.D 	//IJKK-E LL0;;D;I	CEi&' !MM + 	& TU& WahZx%zT!E(^DTUVW \] -6 Rq59Q R R ;C<N;OPQ* *QCj)* QR6#JGI CD \\'*FB$RD)*Av||D);;=T6v&tCRyk24
 #5$/%,) (0~~'7UUtq!3>Tt>T;TUUv'E%Rv'=AWX\]_^_X`Wa?bc "	s3t9a01 
A	 LL.2215<<<4aGGI 11$7(,I&vQy/VW!
 !v';=XY'77P%QR>@ ||J/ZZ\6L

((*--c2"6+BFWXZW[[`Dab v~7IJ'77R%ST@B  $||T  "'')R!V6) T!GHJ 6 &&,,.))#.OON+;;X)YOZv8GJtPSDTCU:VW 	./"+HQ|qx/GqHH  y x!56
GQGYGYG[Z3!6UadAfIOO-.bx1D0EQqxjPQ`hlm`mR\suQvwxy
 )4 O1 (AeH 4	QuX8M  OM O6#D!-011TUW -8 Qq9%;P Q Q6#@1#m2D1EFH vACYZ//GHI=?e
Rj
 
-	
:;	&M=G==F=G==F=G==F	Jvhk&VHLQTU\Q]P^^`
ab	&M 6 (HEII!H+W_`4&!F)%&X;X;,,T2L"2A& 688:K
|4566 
&Mw	  	Gv=s1vFF	G0  	Bv8#a&AA	B*  	Fv<c!fEE	F  	>v4c!f==	>R %   .(,--.T !S  E6#;SVDDE4 V" %   % L"6+BCFKKL8 IO !RU
R Rs  Cv='Aq25v=(C#q=$v=0B(r*$v==BsA>v=.t2!tv=A)t?v=4t5v=7?t6v=8$t)t!v=(B$t>t9t9A	t>&Bv=;u+u+A
v='A;u1"Av= <v<Cv=v.&v.*Bv=9v3"v=2v8?v8Av=	q:q5/v=5q::v==	r'r"v="r''v=*	s3s	v=sv=	t s<6v=<tv=	tttt	t6t1+v=1t66v=9t>>	u(u#v=#u((	v=1	u>:v==u>>v=	v+
v& v=&v++v==w__main__)r<   )__doc__r   jsonplaywright.sync_apir   rq   rn   r   r(   r   r   __name__rS   r   r   <module>r      sJ   
   /K-
	LfP zK r   