
    ih<                     \    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)
z~
Argos QA Tester - Naver Blog Keyword Analysis Feature Test (v3)
Monitors network requests, waits for keyword analysis result
    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        N/home/jay/workspace/memory/reports/task-1933-screenshots/03_keyword_test_v3.py
log_resultr      sY    hAEEfhWDF!I;
Cvh	#JNNfi6JK    c                  z  # t               5 } | j                  j                  d      }|j                  d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       |j                  d       |j                  t         d       t        d       	 |j)                  dd      }|j+                         dk(  r|j-                  dd      j                  }|j/                  d       r.|j#                          |j                  d!       t        dd"       nt        d#d$d%       |j                  t         d&       t        d'       	 |j                  d(      j                  }|j!                  dd       |j1                          |j3                  d)       |j5                         }	t        dd*d+|	 d,       |j                  t         d-       t        d.       	 |j                  d/      j                  }
|
j!                  dd       |
j#                          t        dd0       |j                  d!       |j                  t         d1       t        d2       d3}d4}d3}d4}t7        d5      D ]  }t9        j:                  d6       t        d7|d8z    d9       	 |j                  d:      j=                  d!       }g d;}|D ]  \  }}||v sd}|}t        dd<d=|         n |r n9g d>}d)|v r|j?                  d?      D cg c]	  }d)|v s| }}|rt        d@|d dA         tA        dB |D              r|jC                  d)      }|tE        d|dCz
        |dDz    }t        dEtG        |d dD               dF|v sdG|v rd}dH}t        ddIdJ        ndK|v sdL|v r'|jI                         }d}t        ddMdN|d dO          n_	 d3}dQD ]G  }|j                  |      }|j+                         dkD  s(|j                  j/                  dD       sEd} n |rt        dR        |s|s	 |j                  d:      j=                  d       }d)|v rC|jC                  d)      }|tE        d|dSz
        |dTz    }t        d#dUdNtG        |d dD               nt        d#dVdW       |j                  dX      j+                         }|jK                  dY      }t        dZ|        t        d[       |d d\ D ](  }t        d]|d^    d_|d`    datG        |db                 * 	 |j                  t         dd       |rt        de       	 |j                  dX      }|j+                         } t        | dkD  rdnd#df|  dg       | dkD  r|j                  dh      jM                         }!t        |!rdnd#di|!d dj         g dk}"|"D ##cg c]  #tA        #fdl|!D              s# }$}#|$rt        ddmdn|$        nt        d#dmdo|!d dp         t7        tO        tQ        |!      dq            D ]l  }%	 |j                  dh      jS                  |%      }&|&j/                  dT       r7|&j#                          |j                  dr       t        dds|!|%    d,dt        nn |j                  t         du       |j                  dv      }'|'j+                         }(|(dkD  r<|'j                  j#                          |j                  dw       t        ddx|( dy       nt        d#dzd{       |j                  t         d|       n|rt        d~       t        d|        t        d       tT        rtT        dd  D ](  })|)d   dk  rdnd}*t        d|)d    d|* d|)d           * tT        D +cg c]  }+|+d   dk\  s|+ },}+|,rt        ddtQ        |,       d       n+t        ddtQ        tT               d       nt        d#dd       |j                  t         d       |jW                          d d d        t        d       t        d       t        d       tY        d tZ        D              }-tY        d tZ        D              }.tY        d tZ        D              }/t        d|- d|. d|/ dtQ        tZ                      t        d       tZ        D ]F  }+ddddj]                  |+d   d      }0t        d|0 d|+d           |+d   s6t        d|+d           H t        d       y # t$        $ r!}t        ddt'        |             Y d }~d }~ww xY w# t$        $ r!}t        d#d$t'        |             Y d }~>d }~ww xY w# t$        $ r!}t        dd*t'        |             Y d }~d }~ww xY w# t$        $ r!}t        dd0t'        |             Y d }~d }~ww xY wc c}w # t$        $ r}t        dP|        Y d }~"d }~ww xY w# t$        $ r Y w xY w# t$        $ r!}t        d#dct'        |             Y d }~d }~ww xY wc c}#w # t$        $ r Y w xY w# t$        $ r!}t        dd}t'        |             Y d }~d }~ww xY wc c}+w # 1 sw Y   YxY w)NT)headlessi  i  )widthheight)viewportc                     | j                   t        fddD              r7	 | j                  }t        j	                  |d       t        d| d        y y # t        $ r Y y w xY w)Nc              3   &   K   | ]  }|v  
 y wN ).0kurls     r   	<genexpr>z1run_tests.<locals>.on_response.<locals>.<genexpr>"   s     U18U   )keywordnaverbloganalysisapi)r&   r   z
    [NET] r   )r&   anyr   network_responsesr   r   	Exception)responser   r&   s     @r   on_responsezrun_tests.<locals>.on_response    ss    ,,CU%TUU%__F%,,""(.  Jvhau56 V ! s   5A 	A&%A&r1   z$
=== [1] Navigating to dashboard ===domcontentloaded)
wait_untili  z/03_keyword_01_loaded.png)pathr	   zDashboard navigationu,   
=== [2] Clicking 네이버블로그 tab ===u%   button:has-text('네이버블로그')visible)statetimeoutu   Click 네이버블로그 tabr
   i  z/03_keyword_02_tab.pngu5   
=== [3] Switching history to 키워드분석 tab ===buttonu   키워드분석)namer   )exacti  )r8   i  u%   Switch to 키워드분석 history tabr   u   키워드분석 sub-tabz	Not foundz/03_keyword_03_kwd_history.pngu"   
=== [4] Typing '실손보험' ===u2   input[placeholder*='키워드를 입력하세요']   실손보험zType keywordzValue: ''z/03_keyword_04_typed.pngu#   
=== [5] Clicking 분석 button ===u   button:has-text('분석')u   Click 분석 buttonz/03_keyword_05_analyzing.pngz.
=== [6] Polling for keyword results (30s) ===F       z
  Attempt    z/15...body))
relKeywordzrelKeyword data)u   연관키워드u   연관키워드 section)u   월간검색수u   월간검색수 column)u   PC검색량u   PC검색량 data)u   MO검색량u   MO검색량 data)	   검색량u   검색량 data)u   경쟁정도u   경쟁정도 datazKeyword results visiblez
Contains: )u   키워드 분석 실패u   API 키u   네이버 APIu
   검색 APIz
Rate limitu   인증 오류
u       Lines with '실손보험':    c              3   $   K   | ]  }d |v  
 yw)r<   Nr#   )r$   ls     r   r'   zrun_tests.<locals>.<genexpr>   s     Bq~2Bs   d      u#       Context around '실손보험': u   ✅u   완료u"   실손보험 in history as successzKeyword analysis completedu*   실손보험 appears as success in historyu   ❌u   실패zKeyword analysis failedz	Context:    z    Body check error: )z[class*='spin']z[class*='loading']z[class*='Loading']z[class*='progress']z$    Loading spinner still visible...2   i,  u   실손보험 found in pagezNo results after 30su*   실손보험 not found in page text eithertablea  
                    () => {
                        const elems = document.querySelectorAll('[class*="result"], [class*="keyword"], [class*="table"]');
                        return Array.from(elems).slice(0, 10).map(e => ({
                            tag: e.tagName,
                            cls: e.className.substring(0, 80),
                            text: e.innerText.substring(0, 60)
                        }));
                    }
                z
  Tables on page: z   Result/keyword/table elements:
   z    <tagz class='clsz'> textzFinal state checkz/03_keyword_06_result_state.pngz(
=== [7] Testing result interactions ===zResults table countz table(s) foundthzTable column headers   )rC   monthlyPcQcCntmonthlyMobileQcCntrD   PCMOu   연관u   경쟁c              3   &   K   | ]  }|v  
 y wr"   r#   )r$   hcs     r   r'   zrun_tests.<locals>.<genexpr>   s     <RQ!V<Rr(   zKeyword data columnszFound: zNo keyword-specific cols in       i   z	Sort by 'zHeader clickedz/03_keyword_07_sorted.pngztbody tri  zRow click/selectz rows, clicked firstz	Row clickz0 tbody rowsz/03_keyword_08_selected.pngzTable interactionz 
=== [ERROR] Analysis failed ===z  Error details: z&
=== [8] Network requests captured ===ir   i  OKERRORz  [r   z] r&   zAPI network errorsz failed requestszNetwork requestsz relevant requests, all OKzNetwork monitoringz+No keyword/naver/blog API requests capturedz/03_keyword_09_final.pngz=
============================================================zFINAL TEST SUMMARYz<============================================================c              3   2   K   | ]  }|d    dk(  sd  yw)r   r	   rA   Nr#   r$   rs     r   r'   zrun_tests.<locals>.<genexpr>9       =qq{f'<=   c              3   2   K   | ]  }|d    dk(  sd  yw)r   r
   rA   Nr#   r`   s     r   r'   zrun_tests.<locals>.<genexpr>:  rb   rc   c              3   2   K   | ]  }|d    dk(  sd  yw)r   r   rA   Nr#   r`   s     r   r'   zrun_tests.<locals>.<genexpr>;  rb   rc   z  PASS: z  FAIL: z  WARN: z	  TOTAL: z<------------------------------------------------------------r   r   r   r   r   z  r   r   z	         )/r   chromiumlaunchnew_contextnew_pageonr   gotoBASE_URLwait_for_timeout
screenshotSCREENSHOT_DIRr   r&   locatorfirstwait_forclickr0   strget_by_rolecountget_by_text
is_visibletriple_clicktypeinput_valuerangetimesleep
inner_textsplitr.   findmaxreprstripevaluateall_text_contentsminlennthr/   closesumr   r   )1pbrowsercontextpager2   tabe
kwd_subtabinpvalbtnresult_foundresult_typeerror_found
error_textattemptrB   success_termstermlabel
kwd_errorsrH   linesidxcontext_aroundspinner_visiblespsctxtablesdivs_with_classdtchdrskwd_colsrZ   
found_colsirY   rowsrcnrstatus_labelra   
api_errorspass_cfail_cwarn_cr   s1                                      `             r   	run_testsr      sl   		 Ya**##T#2%%/M%N!	 	
K( 	56		('9	:d#//HIJ61488< 	=>	G,,FGMMCLLy$L7IIKv=> 	d#//EFG 	FG	B))(9J)KJ!Q&!--.?t-LRR
$$T$2  "%%d+6#JK6#<kJ 	//MNO 	34	7,,STZZCLLy$L7HH^$//#Cv~#a/@A 	//GHI 	45	>,,:;AACLLy$L7IIKv45
 	d#//KLM 	?@
 Ry I	GJJqMJwqyk0174||F+66t6D! $1 KD%t|'+&+"6-DTYSZG[\  
 "T)(,

4(8P1Na<OQPEP ?bq	{KLBEBB"&))N";C-1#aS/#c'-JN!$G^\`]`MaHbGc"de$6(n:T/3.R *63OQ} ~ %!&.!8H<V-;-A-A-C
.2 *63LPYZdeifiZjYkNl m %
"'p BR(Awwy1}););C);)H*.	
 #@AOI	V K@||F+66t6D!T)))N3Cs1c"f~c#g6Cv'CyQUVYZ^[^V_Q`PaEbcv'=?kl g.446"&-- 	1 	# ,VH568:("- TAE!E(8AeH:Sai@QRST 	//NOP =>.@g.\\^R!V69NSURVVePfg6<<-??ADv6;QVZ[]\]V^U_a MH-5!S<RT<R9R!!SJ!S!"6+AWZLCYZ"6+AEabfgihibjakClm #3s4y!#45 	!! $T 2 6 6q 9A ||C|8 !	 $ 5 5c : *6YtAwiq3IK[ \ %	  9	! OON+;;T)UOV  <<
3DBAv

((*--c2"6+="EY?Z["6;GOON+;;V)WOX
 57%j\23 	78'- H')(|c'9twBxL><.2e9+FGH &7M!H+:L!MJM6#7C
O;LL\9]^6#5#>O:P9QQk7lmv35bc//GHIsYx 
-	
	&M=G==F=G==F=G==F	HVHHVHHVHIc'l^
TU	&M - (HEII!H+W_`4&!F)%&X;Iak]+,	-
 
&MM  	Gv=s1vFF	G&  	Bv8#a&AA	B  	7v~s1v66	7  	>v4c!f==	>v Q(  4.qc2334  @  @6#6A??@. "T  ) ! !"  @6#6A??@ NaY Ys  Cl0A
g5l0Bg;"$l0A0h(7$l0A
i&A3l01jj%l0(j	jjB jl0-j l0+j,/j,j,l0&C.j<(l0=A;k>8k)k)A	k> A'k.B%k>,A)l0l+#l+'A2l0	g8g3-l03g88l0;	h%h l0 h%%l0(	i1il0il0	i?i:4l0:i??l0j	j)j$l0$j))l0,	j95l08j99l0<	k&k!l0!k&&l0)k>.	k;7k>:k;;k>>	l(l#l0#l((l00l:__main__)r>   )__doc__r}   jsonplaywright.sync_apir   ro   rl   r   r/   r   r   __name__r#   r   r   <module>r      sK   
   /K-
 LjX	 zK r   