From 10db652cbc833b7d071eaf6cd11854977da933ca Mon Sep 17 00:00:00 2001 From: YiLin <482244139@qq.com> Date: Tue, 26 May 2026 14:40:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=85=E8=A1=A5=E5=B9=B3=E5=B7=AE=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E5=92=8C=E4=B8=8A=E4=BC=A0=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __pycache__/actions.cpython-312.pyc | Bin 11718 -> 11718 bytes __pycache__/check_station.cpython-312.pyc | Bin 11178 -> 14468 bytes actions.py | 22 ++- check_station.py | 130 +++++++++++++++++- ck/device_b.py | 1 + globals/__pycache__/apis.cpython-312.pyc | Bin 20668 -> 20825 bytes .../__pycache__/create_link.cpython-312.pyc | Bin 8654 -> 9819 bytes .../__pycache__/driver_utils.cpython-312.pyc | Bin 41631 -> 41899 bytes .../global_variable.cpython-312.pyc | Bin 609 -> 638 bytes globals/apis.py | 6 +- globals/create_link.py | 52 +++++-- globals/driver_utils.py | 9 ++ globals/global_variable.py | 3 +- .../__pycache__/login_page.cpython-312.pyc | Bin 7244 -> 7682 bytes page_objects/login_page.py | 13 ++ page_objects/measure_tabbar_page.py | 4 +- page_objects/screenshot_page.py | 4 +- page_objects/section_mileage_config_page.py | 2 + 18 files changed, 217 insertions(+), 29 deletions(-) diff --git a/__pycache__/actions.cpython-312.pyc b/__pycache__/actions.cpython-312.pyc index a725faebbf013c4c5bf1b399cf14432ef4c5d8ed..9d06141c02b3714a9bae5bd21285b2822b4a4275 100644 GIT binary patch delta 20 acmX>WeJq;$G%qg~0}vSGZr{kgTNeOCsRlIw delta 20 acmX>WeJq;$G%qg~0}xbcY~9GcTNeOD2L?C* diff --git a/__pycache__/check_station.cpython-312.pyc b/__pycache__/check_station.cpython-312.pyc index 80eace210b3f8ea1034a2d3d4e08861ae9ee7eef..59327a00f4be42a047157f709996fb538e7d75fe 100644 GIT binary patch delta 3954 zcmaJ^eNa5Q#pw_Jo>fE|uiaSM+5rNd8-mMpSNx%?Ha~m-r0u_Li z9tEWAk_hb$fIFR(9|dj`WhNC3`2ZMblL%1hmy%lGwosP(_3TK7B^LuNSPSM}6dYH0S~paAPEJi%2#5I##M6Rd5?M1ken{v0g%% z290PVB6{|O)Pos@{waMAGdMBVo8V21c0dh-L1L$~*+Kal-OrIg3ds>LBLQ;t(0zFy zo}z{VT7!rdk{z^;J+JO~ECmVD5fOILBhG|~84(L2!p>I2WgwEt{z8+#LIzo0RP_W; z_yT@k1D%Cb1SC$e;1Iony`ag#vf00AHeuc&srHNn%Vhh~w#X2OQ$ah}c$y#TUB(Sq z+t4xN2##6VJ(g@})n>6_4)&a-1gb|Zo3M+l!FpDY!*%HI!RL^4fmTqD!C+f4Bl~5J zEtSMBp%B0UgD-+g>7vp?;!Blbgd&W38H~)ho3Re+MiR;@`sF=8NEpg)f)Qz_$ zU%Hxj zX2(JJ;s52ZNWOp~=G7tXiUKTO26To|?XqK6yis-j@qr*`*%VW4{<~KH-E1biE4w0E z3_iA6o`7^+nFdau5P6V(T5KpU!9OEph^n*8*W#b8B_QvcOB}cv0CM;zWZ88w$}%|! z3t~j-=jyu@qq~K}twzE7po%LYEGXHUj#pW?#TFtpq81OFmzPch{nCl`V7kp?KsXkn{x* z+PoYf%di}vMYhCdC5lN}+W)dafygI~KT@f)K^PTDVdMb1uuYPTnub({Gv^hp681^8 zxlq+6X_vI9Nnu{RMn8g3%tNFvfl$mrDB2YQ1f2g5gmNCjv;;zlAfl=^WxG;aCm?()gAQ}4jKcP#Pl$;8z&3&smf;^a#c zX9i0aej~7b{s7hJ4N{&an%d`&Hka5Z&c2Nb>Zw;I|1kKF>B5hxo2L`Kzj+vEZzvRi zYuQ)gH_lCTUrwC*eX`OnEQ+8jJ9!#9dIe$&bvbc$C~@VT>EFIT-S>L37DW$Ba`)s0 zb4fT?=GNryI*dP2@=IP3X$pkAWL4w75HD@=`@#{L+Krkt)$C`&o=`&sHOwT$WbZqP z8)r)F5!4hD9leQbA1+lS+d_%mwIhOB=ft^-6URSFbPUFaUxf#cE}YyRLH*R8xO_G7 z;pxfOj!u4fbLz_F$?In)&%ek^BaID>p+k*4<~b}bYHHjcLH#+oP2$RX@tb{#x4Y+D zNJ=Np9*bZ5VEW>(r!Kz;b%}EWQ2oflqNF;0Gl~`_0~f#XtE72+_?3kf=uFA4o`g;A zG=HWD%ITzNZr8345+^$+Pxnus?wPuL8E%Q55I>=F8hCAVe;~Bi8}JcS=(9bsYD>MB>c$MsANoyI=zFhqHY z@Vyz~(c@GJ4;Wt6M2G4rU)Y1PnAbj>&&|nqoCkWt%aA()r(Nvwj0d{H%OUYlG#!F$ zz~4xDd?6BIEt+`{Y?PNW5ucA@7+%464^qh$^rO&Y29>(GyD3a`HWUc0^Ki!Y1C*~} zSJ)f&hZ>8Py)u-rsWB?pvEUofuug7{TMI_5B_r07udG$W4IS0vwpF9Hsu5e&S2k~y ztMPW!&PssE-qqUK%C?WD7mcJB4K#n9zM-RXR`C;Z3CMEv@9){)ALt1TtQ*{P%Y3Jr zbMO7y=If}Pkr3+4ab0ScvQybzJ4pUj_xQLjy-U@p>TVwhajQzX%q=n9)>#=a=Z{8B z>qkuMJF33XXCNbWr<${G94_WI?&Nkp&)K{&-QKZ`+*5Ms;o^>Cx~wsM#;L;Yr@Nz^ zt$5&tLDQgOIET}1c|hP<8t8&btIiy=*!l~53P&w#M=WaxLtk5VoRWT{w~QOCUDch{ zT=tql54R>-&N+6(3>EQobJwBHLtX8i?dLhof9+Ew|#SnBnO$tNpv# z^}vvMABa#~<_=kM{juSeYo+B}$xhDpWK35*o}Tf;3;|7knBDLr>&@4Fw+gO>xXmuk zRvXhjwZs@cj?C=iy8I}5g}k&ar7{ov$xyswBlrX_Gr}LATFM@&SPedxnh>=Mbfdgt z6@FXfsL01}XN#fH?R)}BR^f+d7*j;j{(}_liG=+DhDJr2w=fj!c(894`9i@UypdG1k7`19lM((g zq9xFZma=abti)t&tiT>cjf+OLS~#ZQ27MMmseR~X!;&Ig?PQ1^j?VY8O~DWu2~ef< z1-JseU>OpU863l~yFhanDDML8U7)`QjQ2q1T_C>;Qtp9A?}5Uw2VU)GAoKPJ<@KNh;YM;rUn zboZsrTGVw~#rcnni#m{je>i5XI5mSI;$W@=L4+1%E2%;MnNAR#-9QoiaqsI81RuQ5 z{oZrlJ?GwY?pr$g-c!<-qUZwpY+Sie+}U$V3Zu1CUH!+A;ZPkKXvh#sPSuIP(yo$Q zbz7PSl^mIpv>(S#*XgL+7F zPNe~G*amvb%C-~KupWMKm>W;nh72Ohma1brj&Ii{y6d@-f$#@%!^f*PGpPiY}aouHB#&N~07AupAgRWbRJV4j|9T`IB z$WZhR7wZH^-`ffDZ8RA@2)KjJ6ol`m1MZ^uw>Gg@YTyzx_$U@(L-t>n)9Z5jYq@(( z=*9}Q7Vb8dN&r?uEA+M6`IulMg}wlak@c`&Y+hmYrVs6_pLpXLw1*7E^Zu#^&pDrW zR#6p>abr+LN}%>ZTtM`27u)xSW?6xMxcKRfSKq$*+511f@X3vLKDv3~EcvTl3oiHy zlX_t)PmfzEmZ$HVnVxu3k;$`(M>DKub$g{)((Alw==zM+t-5TE&*^!yfOUP^oGe$Y zvi_2oYfrH6IXpYP;N8b!9=scpS}s$UxmbHS*^MGi;1pkTpLAarlIucpEtUO77^F4% z{Z5E%q(=H101PPJti+q&)Jg|cVvK_vwXPtBYB?aT7U_?L-dpZZ>{gV1|1btW8=e=IOL9{-;&{cdS2z zp;B3!HS}S8lCEI4#XL-Li$e%)g0u int: if __name__ == "__main__": sys.exit(main()) + \ No newline at end of file diff --git a/globals/__pycache__/apis.cpython-312.pyc b/globals/__pycache__/apis.cpython-312.pyc index 6b2fb5bcc7977e01fe63f5dee6aae6697626d212..6d30a659316a85a0e7aa18935d2116e8f5de0640 100644 GIT binary patch delta 1872 zcmZ`(Z%k8H6u)og=yb2j z2ThiY5VM=?pEGgpgF64=x-2f)2ZJK`Zwtv1l~4O%vMgB^682?FmhIeET0^4m!@0lv zJNKM>PVf2k$FK0y^Vs&lY84TD-<^FrP@cSDyT1}Yqfb|san}VJ!Q~|xgN8JNZ1|GP z@G>tOWfLGHy%r15WwlOvpw>@+UslAa0v)R_E77pVYereTB3(AHtO#XHnu*4_V!?7C zija~}d5UZN#HzC{I#(N}*JFNKAMx=M0s{7i-%re%nT~HLrl%rBICtK)z&whS;hgWk zh{YsoV%iNEyPE>EzRqElG_e)!>VjJ>nuTR>dN1RJI;@&CjYr)%o_bS(7^NHikDm)X2IrsaK3zvXxsq~o|`*O zM*Fj0ypqPHHJq{=QqPKg{r!iAht%EyS=kB1u^5dv$Fe)twqR)=?3Mk@4A8F|zV|wm zdKThn@9b)hclO3xTDo>@eXTdqO0RD&riY?YY@-*VmAuji$LND-g0}$(QqQ_I;(LIi z@c3zkzP>Kx*@}g?@H6kS$KJ*nZ{vqso`hH2Y@8`+%br}fikx_ZLsH3S(l288?=%Y> zYi{glLbpYGdkMN-8UuXCy&UW$SIVqE9)M-4#M!Z)Ox46q9Svl<-T>5e0}s^ndcts% zKUq!g`QoN6OUeDEC9t`_A#Umv$V0&bn}@}5Q!+#zh4>_{rfXv%+bz({r%1*bEOQx- z*5QCVLqL8+CLlTxArl}IqQHieeiHLyU3M;zodJZ$T@ebhGt#Y*0KF0m8e~y3(x3!d zlWYc%n2|}02U(_k)WJFFPXWO!+jVu;&{9u1?a*{z9(v6A-{FVlIo_{>Vq^@E72;Ci??XTlt(Xn??zA5eB6B0DqAzKF4m4-CYV$pkDjloAd?i? zy>LTW?uIq8Uv=jXY36)ohf&%p2VU$^ysSjpx5?vQRES!U&jXD_a@V{X()+G>QKrSe z#7>lJDBoE2&rR)E0QD%4Rq3PA=41Hn?6=KJu(6*pa(1faH!KzDQc+SsfjGALEc*Fb zQ{TG-y~E0&;?kp;IY`}Y6}};Wv*Nx1C9U=jr}rv~3PjohCP=rp)vP)S=yN8YL3s2L zH0MD}TJcEx6Ptac{Vy{r3O#nLo^h-m+495}9&ennHD%AYCAq$H@#?l(G-0xDHlYc3 z4DfANE!aC;1+!Hlu#+Zd+j25l8aK98k-I?yPuo29u(%egyz8_ zg-ydh=GehQ^6=o^Cgl{Z?CxpbgR%W${~TiL`2L&ft(Ixmt;7!}W*WNYb#kti^kD2d bw|x$=_2Qf3{g-yl>v(=27r;fzNyz&@eZs)k delta 1833 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 hV9`!5j6$evzsv(x7NqMs5H={mV z13)*BKvM#~U+Ff(en`UrfS`p5L3}Te${`8#08xYgUgN-j25h*I6+}@hauN`AA}{Ji zK{SZQI)0ALG>^^vFI${w5##IlI!%}ntzjfFrC|MD0Kys`;7Zn&C}~6+`Ln;5&`*%k zUznBHdObd}*=n_J%myHsCn3?X%}8dDf|yMdlj@E5$XYu}7E^FeRR-Q~va!xN) zWu}bsT{EoffapFA!&*s8fOL?Y+%zqZ=oNhuSEmbW{y(%diL19z@Ird5sF;C&skY*` zsttJIJ{z0)A0A!`wKhvaJ)oC~#X=y#V6uclc10Wjr0F@8O&jyyM%<`q)qsd*-B?OT zX=Jg9aIL0PHZ>*@M}$iT{Sc3AO)zx9_LEytE!YAVWaF>bRunYnkTkc?UmAaVzh_mc zXYAs@22HHIS#>NfJuX!eVci%bDwL*5*=op<4bdbnkInHmi z;-%~Mxyl#-c7XdjV6flPnLCXKjKc}fjp|nXV785E1o_6g0!An?Z6(a#p)H{F~NM6qe7 zvBCCpQQPZO*C&+dgt@vz)`Xq_)9V(@qdIVkzXM+?bl|5K+bqJ2mZYo46hgU*SE8Cw z3*yPCSf3K>oSApXiEkID;(=Wz=%thy7-<=KdY)&3q(VhYvsC__8((o z(%cc-7Pti{TY65l+^|4}j@Gi1TAh2+atvXiRUm?Ol4vrT741`Db(51M(j!rRPO65O zs@^8GpyAh9{JxLzGb{XDkr;P`r5(Sz*8r7`wUgrd@AhPZ%c-!@9qm!C* zPb}0vsZdB&;LK|C85t=UzvAIl*NS;G=;jJN4~jyHI7-Q*(1RTDK@B;?m764q1O^l7!!7@QI1A<%k^d5!>REcLJahs>%JHI6!AGwa^8xem ztiA<(DZ`6a4kxY})s>Sw=I3~;?CUIJw_osUs`9|6OBR;rfzMq2Mdagip~SV?46ZET z$;Xufzk|H48ItHTtAwl2gX?+xY6H4n>_@9PbYmG!Fvvun97`q!4TxIId@XhriMY^GHeYe7abdba1`HvqZNKBH+HXQ;CJ#@Cmum~M;_{_ zLGXc`c8W#GMbLW|-2>!xF+K9Swq%NaO*P_@)63m!7-)I$ibjAXa4OjX?NgZ?v_FjZ KK}#^5Nd6DF|A#jK delta 2565 zcmbVOZEO@p7@pbLy}RALk8W?T*Sp^JK6-7X5L+n*QB%`Pgs{hcPh`4IiOJ3Nae-k1;CIU&QjmAAZf;+_u|t`on87 zJM+HtzVGuq^UkDGSA?^d1plLz@O^zsWPqttG9_|zvtEm};RgUPI!uH^2Yl3l zNJ&pfbvV3JB^L)mQaz4D0eR@9I&q{e2Z^>T=EBkYy=1yCz{qvRrXVi?!4Salw_(9$ zx+tP!G`D-6Un5T7r0E{=6vY3F5v5EwIkzvQrtONjiD&~s@@2o5M7QcFQ`MhhCTT1vz#A%z2-~=Cb!6pxc;k{ebGG4fn8F6M(=LsNp_=>b)gcJpC#f z1pDE#7V`JN)7ID)kAM^-OeUUvOI;-ZFb?i{faJB-KG!MuQ(0l1B3w~ctXm_!3<(_8 zt;y$iA^40Xzo@xj&T7E#O7Nuh`HrJ*IBRX({Re_xt9NhS4U^U-vr`CfrOkN)U|0}M z(L}?vKuItT%49-Mt`ST)2{59KAu=v>E}fBVc9e%SuLD(PiiWb^o*v4tG#(H0XxACE z5J7uQCO?m*$eVhj&i!tu-z3_RkWlcj?n-dK*Ywac5EpV_pXu2Lj0U!+Qp4}eQGz2` z=3CF>15O{VDae$nQqBR54@||B8D--Fy9FFSJyj>0F3!eXVMDYR!er>6AC{ZE9&@wi zEMkJ4VUju<_0xV)sB-MSC^?PX?2mgLJe*t~<7sM5g=!ouGoJ4v`UWt@&~VM8g~baM z+bbO1avmRAs#W>qSpE6KH9D9!A-=!P37aF-p)#FlO0 zn~M^EK1N1g3%~?Zf~?-`V;3sI%hsF1;v=ny<0xGb$H&07^QegFTO5^-=G7*UD?hHR zb_N*z1vdw*Q~-N&0do9MQ;?s+f(i}1KMl6r4NNE;bKbc@F!IA9 z%HPJq?&N3 zc!#T>tadFHH06qQ^MXldL3_`LXQ}R0pghcAr+Ai>xS4U1QIp|}y%ypG8=d0LU7CWg|0onfF*KHB76bIJ#@4#$*@~SK|8Bg|~|Y)G&nVtswA71pez{{ZY+Pani_ za5oBqy7gdboiz4Fx7eqGi-ESM=(whP1zmj6l5Om51D8daE-w4K!}N2dHA2U$Le{;Z z8C+B4-d1!???%08G#zFMrsL%?Em6mGD`J*5c?0!!W;VppOxQ&&GjWMpX41?%)7-pi zIl8WF6zJl**TWWiwq{ccx{+a-ZnQ<{d=|0!tfxFrNo?LC(XF$~yBq1^mMRaV(Jj6E ziGeu!DlQGAt?cnnAe<(Do*0FnS?0-Y0=#bBKJ^!b-&^0F-h$vSR{J>#MOVVqd+08p vpN});&(&3PY&Ex?Y<#CH(JMghx2>WIvv4k|!O&cb8;0)HrlDqJsG|P>{Hi$E diff --git a/globals/__pycache__/global_variable.cpython-312.pyc b/globals/__pycache__/global_variable.cpython-312.pyc index c02f3b2fd6705d8c3540b1dc17be249f50f75a4e..ce0d191cf3b8b5937916d2d1e8664ef22a572783 100644 GIT binary patch delta 160 zcmaFJ@{fi0G%qg~0}$}dy_p#}kyp~r2FRJtkirnfkirSm>Gy!QkYVh)0v`J z(;1@JG8v-Sfiwq@<^*CcAm#@0c_t>vGxAPsP!SSz_wjdf^oe(LcJ>eT3yJr1*|<2C uQCSRVIwKGlhXRQY%#4hT4}?W8FbLcbl5gO@AtH8xL2$AxlLLzgP#OSEuOnmt delta 143 zcmeyz@{oo1G%qg~0}v#MRA=%`&BVNPd?Vo7I+ zV$EcTVgu6bK$-)HIf0l9$mgzP(PX{FaEm*+s Optional[Dict[str, Dict]]: while retry_count < max_retries: try: # 准备请求参数 - payload = {"linecode": linecode} + account_id = global_variable.GLOBAL_ACCOUNT_ID + payload = {"linecode": linecode, "account_id": account_id} headers = { 'Content-Type': 'application/json', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' @@ -422,7 +423,8 @@ def get_user_max_variation(username: str) -> Optional[int]: # 1. 准备请求参数与头部 # 接口要求的POST参数(JSON格式) - payload = {"username": username} + account_id = global_variable.GLOBAL_ACCOUNT_ID + payload = {"username": username, "account_id": account_id} # 请求头部:指定JSON格式,模拟浏览器UA避免被接口拦截 headers = { "Content-Type": "application/json", diff --git a/globals/create_link.py b/globals/create_link.py index f9d915b..62eb24e 100644 --- a/globals/create_link.py +++ b/globals/create_link.py @@ -17,8 +17,12 @@ from urllib3.connection import port_by_scheme def run_command(command): """执行系统命令并返回输出""" - result = subprocess.run(command, shell=True, capture_output=True, text=True) - return result.stdout.strip() + try: + result = subprocess.run(command, shell=True, capture_output=True, text=True, encoding='utf-8', errors='ignore') + return result.stdout.strip() + except Exception: + result = subprocess.run(command, shell=True, capture_output=True, text=True, errors='ignore') + return result.stdout.strip() # ======================= @@ -131,18 +135,39 @@ def cleanup_wireless_connections(target_device_ip=None, target_port=4723): def start_appium(): appium_port = 4723 print(f"🚀 启动 Appium Server(端口 {appium_port})...") - subprocess.Popen( - ["appium.cmd", "-a", "127.0.0.1", "-p", str(appium_port)], - stdout=subprocess.DEVNULL, - stderr=subprocess.DEVNULL - ) - # 检查端口是否就绪(替代固定sleep) + + # 先检查端口是否已被占用 + try: + import socket + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.settimeout(1) + result = sock.connect_ex(("127.0.0.1", appium_port)) + sock.close() + if result == 0: + print(f"✅ Appium Server 已在运行(端口 {appium_port})") + return True + except Exception: + pass + + # 启动 Appium Server + try: + subprocess.Popen( + ["appium.cmd", "-a", "127.0.0.1", "-p", str(appium_port)], + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL + ) + except FileNotFoundError: + print("❌ 未找到 appium.cmd,请确认 Appium 已正确安装") + return False + except Exception as e: + print(f"❌ Appium Server 启动失败: {str(e)}") + return False + + # 检查端口是否就绪 max_wait = 30 # 最大等待30秒 start_time = time.time() while time.time() - start_time < max_wait: try: - # 尝试连接Appium端口,验证是否就绪 - import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(1) result = sock.connect_ex(("127.0.0.1", appium_port)) @@ -190,7 +215,7 @@ def setup_adb_wireless(): if not usb_devices: print("❌ 未检测到 USB 设备") - return + return None for serial in usb_devices: print(f"\n🔎 处理设备: {serial}") @@ -261,7 +286,10 @@ def setup_adb_wireless(): # print("🔄 关闭Appium连接...") # driver.quit() - break # 处理完第一个设备后退出,如需处理多个设备可移除此行 + return wireless_id # 返回无线连接的设备ID + + print("❌ 未能成功建立无线连接") + return None # ======================= diff --git a/globals/driver_utils.py b/globals/driver_utils.py index e03e916..f7ab746 100644 --- a/globals/driver_utils.py +++ b/globals/driver_utils.py @@ -547,6 +547,10 @@ def grant_appium_permissions(device_id: str, require_all: bool = False) -> bool: """ 修复版:为 Appium 授予权限(使用正确的方法) """ + if not device_id: + logging.error("设备 ID 为空,无法授予 Appium 权限") + return False + logging.info(f"设备 {device_id}:开始设置Appium权限") # 1. 使用系统设置命令(替代原来的pm grant尝试) @@ -1084,6 +1088,11 @@ def go_main_click_tabber_button(driver, device_id, tabber_button_text, max_retri 返回: bool: 成功返回True,失败返回False """ + # 检查沉降观测应用是否已启动 + if not is_app_launched(driver): + logging.warning(f"设备 {device_id} 沉降观测应用未启动") + return False + retry_count = 0 while retry_count < max_retries: diff --git a/globals/global_variable.py b/globals/global_variable.py index 86549ce..91262ec 100644 --- a/globals/global_variable.py +++ b/globals/global_variable.py @@ -1,11 +1,12 @@ # 全局变量 GLOBAL_DEVICE_ID = "" # 设备ID GLOBAL_USERNAME = "czyuzongwen" # 用户名 +GLOBAL_ACCOUNT_ID = "" # 账号ID GLOBAL_CURRENT_PROJECT_NAME = "" # 当前测试项目名称 GLOBAL_LINE_NUM = "" # 线路编码 GLOBAL_BREAKPOINT_STATUS_CODES = [0,3] # 要获取的断点状态码列表 GLOBAL_UPLOAD_BREAKPOINT_LIST = [] -GLOBAL_UPLOAD_BREAKPOINT_DICT = {} +GLOBAL_UPLOAD_BREAKPOINT_DICT = {} GLOBAL_TESTED_BREAKPOINT_LIST = [] # 测量结束的断点列表 LINE_TIME_MAPPING_DICT = {} # 存储所有线路编码和对应的时间的全局字典 GLOBAL_BREAKPOINT_DICT = {} # 存储测量结束的断点名称和对应的线路编码的全局字典 diff --git a/page_objects/__pycache__/login_page.cpython-312.pyc b/page_objects/__pycache__/login_page.cpython-312.pyc index de856eb1c95130b856e961d876ecde659ba10c94..9a8cdc3f004c9e217f016aca36082adf1c934e47 100644 GIT binary patch delta 1413 zcmah|T})e596#q?Xzy)%`vI5I+d@}hK!Cz#kU3e$M}hePg)JFdSabxr4N^CXw{0rR zt#u>@j7-@Mx^#$RF)DHK6Ad`$$R4Ikw$3{@4QqTbh5~yUn-7}kgXdD}#TR!T{^$Sk z`BnuLj^WpwT{qV^*vEgNX9#2*pzoT2u>1 zMKw=z81E~US^pip<~&SgBGmulv^;g5*g(=E%~K&Ll!|mPFTGwjoA!bbpiVAhAC3vpent&M5L4i4MgB`Dx|dM+lJntt$GM} zV?@K#5v`~dHRzOn2yRC@Lvf}~)cLAq2-<5XC@_gyKI<6fVx8Hd23vM2Q)v>cL6otK z1ir`7CBv?k9Hla3e#jnj73_Ks27nDMb;e@GqEy#=0gS8dyTRzp+~fS?PE6JyDj$Sx3u|Hg(?+)F^vOGH#*uu*|XXVOMp>25_5cUgvLetaR>kkbCyZiZ20WKxSzP|hFiR9>Kt6zSQd~NB~{| zYZ;+gcTOXWF6P=spIqeZqfg&4m=|q@(~rbz&(_82X3B5bYR0KG6|fgi?~5HedpLG@ zrft6XR(`{{=GW}}>CT(k<%>Jr6CJnNnqOGk>9&(?Qc<(iazJW6C>`V_uV3N^rGgiK zVudAK?l{>o-6vJmOO*{$L!Y$u`P*#&8U+Z(Halsyz`Q0Bnz#gO`D<-2B$%AvjO^bJ zR3P^m_~)7v{gC@;bQteoxUtAn4K9}$J!WuuM-zjCD;Y+Q9b92K*{|e0B^lqTGi0lE zt8nUSmeo@Mt~%ZIIJo9))Z^*8O9scygvUn4Eix)@Cp<-D+@Y2I3c|CUj90GbtLgSq zGVUs9FI15?3NzbF-y5+&)h_vWwS=zki2pf!-Bmq<{Q;pxhSRcn7Tvd5pciTKsttYuau0xP1rx6Q1B}*P AUjP6A delta 978 zcmaixO-~a+7{_OJ+ikbq?)G)*_9c}U(Sk})L7-5r7!$(Qa4;sI7jTVGFpzCcE!m|? zJa{06I0r>TG%-ekiAMPXZ~zipJ!oQ(6Y&!?c+jW^X9{&gJTQmeVcYMZ#R_5TW-j#rg{FM0BfW zN>%MWC0_m?0Ram%kUIQ7lWIgIA;c-H&MFq&rr9(W$wCeuK_3HkjBeNLsU}RslK4om zPvQhmfWm1kR>!=#(g6gS=1T6=@rq^a3Tu$Kj~1LUfF3xj1>T6~gbYNoGwLCA902Sz zGfDxVHlQg!l6M*GKGoa?Nd_wCpl0C=li7VS{Gx3}cNI(Vl;`r!)5iUruNFYi4`wO% z%)MK5Kghz}0GxS;Ub|{z9hK{KKyB2yeM*R#t_rVlh;vI)mCj9ZIiFJAvoH&Gszm)L z?%onqJU`g9P7J2g*>P1t3!YE#Jeu@|=nK&ZdgNV4S>G971Vd^Kk!pg|>5Lk6pmpB> zsuvqg_%Q*xBsQ_DIN5DbG7T@?7ZcF`RS-9VHP4#oI-bVo;tLI*gDtbxEiSOs=l8?V z2nAizrq}y3s>vxs zuWJ)0)LZ)E>o=wU&U)gLUETY3#fg5#(I5Cn|&k>v@a+!#Wh=Apnwe!Zfa&zoj TT)m2x!zY9x3QF66Xc_to56!=) diff --git a/page_objects/login_page.py b/page_objects/login_page.py index 7c29a71..bec8b43 100644 --- a/page_objects/login_page.py +++ b/page_objects/login_page.py @@ -123,8 +123,21 @@ class LoginPage: accounts = apis.get_accounts_from_server("68ef0e02b0138d25e2ac9918") matches = [acc for acc in accounts if acc.get("username") == existing_username] + password = None + account_id = False if matches: password = matches[0].get("password") + + # ✅ 关键:把 account_id 存入全局变量 + account_id = matches[0].get("account_id", False) + # 只有 account_id 存在时才存全局 + if account_id is not False: + global_variable.GLOBAL_ACCOUNT_ID = account_id + logging.info(f"匹配到账号信息:username={existing_username}, account_id={account_id}") + else: + logging.warning(f"账号 {existing_username} 未返回 account_id,已设为 False") + + password_field.send_keys(password) diff --git a/page_objects/measure_tabbar_page.py b/page_objects/measure_tabbar_page.py index fffeb51..c3c45b3 100644 --- a/page_objects/measure_tabbar_page.py +++ b/page_objects/measure_tabbar_page.py @@ -120,8 +120,8 @@ class MeasureTabbarPage: # 向上滑动 # 记录滑动前的项目,用于判断是否滑动到顶 before_scroll_items = self.get_current_items() - start_y = list_container.location['y'] + list_container.size['height'] * 0.05 - end_y = list_container.location['y'] + list_container.size['height'] * 0.95 + start_y = list_container.location['y'] + list_container.size['height'] * 0.2 + end_y = list_container.location['y'] + list_container.size['height'] * 0.8 # 执行滑动 self.driver.swipe(start_x, start_y, start_x, end_y, 1000) diff --git a/page_objects/screenshot_page.py b/page_objects/screenshot_page.py index b75cf4d..5c38c5f 100644 --- a/page_objects/screenshot_page.py +++ b/page_objects/screenshot_page.py @@ -192,8 +192,8 @@ class ScreenshotPage: # 向上滑动 # 记录滑动前的项目,用于判断是否滑动到顶 before_scroll_items = self.get_current_items() - start_y = list_container.location['y'] + list_container.size['height'] * 0.05 - end_y = list_container.location['y'] + list_container.size['height'] * 0.95 + start_y = list_container.location['y'] + list_container.size['height'] * 0.2 + end_y = list_container.location['y'] + list_container.size['height'] * 0.8 self.logger.info("向上滑动列表") # 执行滑动 diff --git a/page_objects/section_mileage_config_page.py b/page_objects/section_mileage_config_page.py index 85fa1e5..1ecfc10 100644 --- a/page_objects/section_mileage_config_page.py +++ b/page_objects/section_mileage_config_page.py @@ -1086,6 +1086,8 @@ class SectionMileageConfigPage: if not self.click_start_measure_btn(): return False + + # if not self.check_station_page.run(): # self.logger.error("检查站页面运行失败") # return False