How to use visualLog method in fMBT

Best Python code snippet using fMBT_python

KYC.py

Source:KYC.py Github

copy

Full Screen

...47 if funcOp == 2:48 connect(Const.TEST_SITE_URL)49 50 clickTestMode(funcOp)51 visualLog('KYC click Id Card Mode')52 enterPrivacyInfo(idKindOp)53 visualLog('KYC enter Privacy Info')54 selectTypeOfId(idKindOp)55 visualLog('KYC select ID Card')56 uploadIdImageFile(idKindOp)57 visualLog('KYC upload ID Card Image File')58 verifyEnteredIdInfo(idKindOp)59 visualLog('KYC verify Id Card Info')60 61 if funcOp == 2:62 logResultToFile(sys._getframe().f_code.co_name)63 clickReTestButton()64 65 66def testIdCard_DriversLicenseMode(funcOp = 2, idKindOp = 3):67 """68 운전면허증 검사 자동화 테스트69 70 인증 기능 funcOp71 2: 신분증 인증72 3: 신분증 인증 | 얼굴확인 73 4: 신분증 인증 | 얼굴확인(+라이브니스)74 5: 신분증 인증 | 얼굴확인(+라이브니스) | 계좌 인증75 6: 계좌 인증76 7: 신분증 인증 | 계좌 인증77 8: 신분증 인증 | 얼굴확인 | 계좌 인증78 79 신분증 종류 idKindOp80 2: 주민등록증81 3: 운전면허증82 4: 한국 여권83 5: 외국 여권84 6: 외국인등록증85 """86 87 if funcOp == 2:88 connect(Const.TEST_SITE_URL)89 clickTestMode(funcOp)90 visualLog('KYC click Drivers License Mode')91 enterPrivacyInfo(idKindOp)92 visualLog('KYC enter Privacy Info')93 selectTypeOfId(idKindOp)94 visualLog('KYC select Drivers License')95 uploadIdImageFile(idKindOp)96 visualLog('KYC upload Drivers License File')97 verifyEnteredIdInfo(idKindOp)98 visualLog('KYC verify Drivers License Info')99 100 if funcOp == 2:101 logResultToFile(sys._getframe().f_code.co_name)102 clickReTestButton()103def testIdCard_PassportMode(funcOp = 2, idKindOp = 4):104 """105 한국 여권 검사 자동화 테스트 106 107 인증 기능 funcOp108 2: 신분증 인증109 3: 신분증 인증 | 얼굴확인 110 4: 신분증 인증 | 얼굴확인(+라이브니스)111 5: 신분증 인증 | 얼굴확인(+라이브니스) | 계좌 인증112 6: 계좌 인증113 7: 신분증 인증 | 계좌 인증114 8: 신분증 인증 | 얼굴확인 | 계좌 인증115 116 신분증 종류 idKindOp117 2: 주민등록증118 3: 운전면허증119 4: 한국 여권120 5: 외국 여권121 6: 외국인등록증122 """123 124 if funcOp == 2:125 connect(Const.TEST_SITE_URL)126 clickTestMode(funcOp)127 visualLog('KYC click Passport Mode')128 enterPrivacyInfo(idKindOp)129 visualLog('KYC enter Privacy Info')130 selectTypeOfId(idKindOp)131 visualLog('KYC select Passport')132 uploadIdImageFile(idKindOp)133 visualLog('KYC upload Passport File')134 verifyEnteredIdInfo(idKindOp)135 visualLog('KYC verify Passport Info')136 137 if funcOp == 2:138 logResultToFile(sys._getframe().f_code.co_name)139 clickReTestButton()140 141def testIdCard_foreignPassportMode(funcOp = 2, idKindOp = 5):142 """143 외국 여권 검사 자동화 테스트144 145 인증 기능 funcOp146 2: 신분증 인증147 3: 신분증 인증 | 얼굴확인 148 4: 신분증 인증 | 얼굴확인(+라이브니스)149 5: 신분증 인증 | 얼굴확인(+라이브니스) | 계좌 인증150 6: 계좌 인증151 7: 신분증 인증 | 계좌 인증152 8: 신분증 인증 | 얼굴확인 | 계좌 인증153 154 신분증 종류 idKindOp155 2: 주민등록증156 3: 운전면허증157 4: 한국 여권158 5: 외국 여권159 6: 외국인등록증160 """161 162 if funcOp == 2:163 connect(Const.TEST_SITE_URL)164 165 clickTestMode(funcOp)166 visualLog('KYC click Foreign Passport Mode')167 enterPrivacyInfo(idKindOp)168 visualLog('KYC enter Privacy Info')169 selectTypeOfId(idKindOp)170 visualLog('KYC select Foreign Passport')171 uploadIdImageFile(idKindOp)172 visualLog('KYC upload Foreign Passport File')173 verifyEnteredIdInfo(idKindOp)174 visualLog('KYC verify Foreign Passport Info')175 176 if funcOp == 2:177 logResultToFile(sys._getframe().f_code.co_name)178 clickReTestButton()179 180def testIdCard_alienRegistrationMode(funcOp = 2, idKindOp = 6):181 """182 외국인등록증 검사 자동화 테스트183 184 인증 기능 funcOp185 2: 신분증 인증186 3: 신분증 인증 | 얼굴확인 187 4: 신분증 인증 | 얼굴확인(+라이브니스)188 5: 신분증 인증 | 얼굴확인(+라이브니스) | 계좌 인증189 6: 계좌 인증190 7: 신분증 인증 | 계좌 인증191 8: 신분증 인증 | 얼굴확인 | 계좌 인증192 193 신분증 종류 idKindOp194 2: 주민등록증195 3: 운전면허증196 4: 한국 여권197 5: 외국 여권198 6: 외국인등록증199 """200 201 if funcOp == 2:202 connect(Const.TEST_SITE_URL)203 clickTestMode(funcOp)204 visualLog('KYC click Alien Registration Mode')205 enterPrivacyInfo(idKindOp)206 visualLog('KYC enter Privacy Info')207 selectTypeOfId(idKindOp)208 visualLog('KYC select Alien Registration')209 uploadIdImageFile(idKindOp)210 visualLog('KYC upload Alien Registration File')211 verifyEnteredIdInfo(idKindOp)212 visualLog('KYC verify Alien Registration Info')213 214 if funcOp == 2:215 logResultToFile(sys._getframe().f_code.co_name)216 clickReTestButton()217def testFaceIdMode(funcOp = 3, idKindOp = 2):218 """219 신분증 인증 | 얼굴확인 검사 자동화 테스트220 221 인증 기능 funcOp222 2: 신분증 인증223 3: 신분증 인증 | 얼굴확인 224 4: 신분증 인증 | 얼굴확인(+라이브니스)225 5: 신분증 인증 | 얼굴확인(+라이브니스) | 계좌 인증226 6: 계좌 인증227 7: 신분증 인증 | 계좌 인증228 8: 신분증 인증 | 얼굴확인 | 계좌 인증229 230 신분증 종류 idKindOp231 2: 주민등록증232 3: 운전면허증233 4: 한국 여권234 5: 외국 여권235 6: 외국인등록증236 """237 238 if funcOp == 3:239 connect(Const.TEST_SITE_URL)240 241 testIdCardMode(funcOp, idKindOp)242 243 # 얼굴 촬영 버튼 클릭244 faceShootBtn = WebDriverWait(driver, Const.TIMEOUT_TEN_SECOND).until(245 EC.element_to_be_clickable(246 (By.XPATH, Const.TAKE_SELFIE_XPATH)247 )248 )249 faceShootBtn.click()250 251 # because chrome_options.add_argument('--use-fake-ui-for-media-stream')252 logger.info('Access Camera Auth Alert Pass.')253 254 # Execute JavaScript 예시255 # driver.execute_script("alert('[KYC Auto Test] 얼굴을 인식해주세요.')")256 # # Alert 확인을 누를 때까지 대기257 # WebDriverWait(driver, Const.TIMEOUT_ONE_MINUTE).until(alert_is_not_present())258 259 # '화면 영역 안으로 얼굴을 맞춰주세요.' 얼굴인식 화면이 사라질때까지 기다리는 코드.260 WebDriverWait(driver, Const.TIMEOUT_ONE_MINUTE).until(261 EC.invisibility_of_element(262 (By.XPATH, Const.FACE_RECOGNITION_TEXT_XPATH)263 )264 )265 266 if funcOp == 3:267 # 이거는 마지막 성공화면이 뜰때까지 기다리는 코드.268 # '본인 인증 완료'269 WebDriverWait(driver, Const.TIMEOUT_ONE_MINUTE).until(270 EC.text_to_be_present_in_element(271 (By.XPATH, Const.COMPLETED_CERTIFICATION_TEXT_XPATH), 272 Const.COMPLETED_CERTIFICATION_TEXT273 )274 )275 276 # 성공 여부 체크277 result = None278 successText = driver.find_element(By.XPATH, Const.COMPLETED_CERTIFICATION_TEXT_XPATH)279 if successText.text == Const.COMPLETED_CERTIFICATION_TEXT:280 result = Const.SUCCESS281 else:282 logger.info('unexcepted message: ' + successText.text)283 result = Const.FAILED284 285 logResultToFile(sys._getframe().f_code.co_name)286 clickReTestButton()287def testFaceIdLivenessMode(funcOp = 4, idKindOp = 2):288 """289 신분증 인증 | 얼굴확인(+라이브니스) 검사 자동화 테스트290 291 인증 기능 funcOp292 2: 신분증 인증293 3: 신분증 인증 | 얼굴확인 294 4: 신분증 인증 | 얼굴확인(+라이브니스)295 5: 신분증 인증 | 얼굴확인(+라이브니스) | 계좌 인증296 6: 계좌 인증297 7: 신분증 인증 | 계좌 인증298 8: 신분증 인증 | 얼굴확인 | 계좌 인증299 300 신분증 종류 idKindOp301 2: 주민등록증302 3: 운전면허증303 4: 한국 여권304 5: 외국 여권305 6: 외국인등록증306 """307 308 if funcOp == 4:309 connect(Const.TEST_SITE_URL)310 311 testIdCardMode(funcOp, idKindOp)312 313 # 얼굴 촬영 버튼 클릭314 faceShootBtn = WebDriverWait(driver, Const.TIMEOUT_TEN_SECOND).until(315 EC.element_to_be_clickable(316 (By.XPATH, Const.TAKE_SELFIE_XPATH)317 )318 )319 faceShootBtn.click()320 321 # because chrome_options.add_argument('--use-fake-ui-for-media-stream')322 logger.info('Camera auth alert passed.')323 324 # Execute JavaScript 예시325 # driver.execute_script("alert('[KYC Auto Test] 얼굴을 인식해주세요.')")326 # # Alert 확인을 누를 때까지 대기327 # WebDriverWait(driver, Const.TIMEOUT_ONE_MINUTE).until(alert_is_not_present())328 329 # '화면 영역 안으로 얼굴을 맞춰주세요.' 얼굴인식 화면이 사라질때까지 기다리는 코드.330 WebDriverWait(driver, Const.TIMEOUT_ONE_MINUTE).until(331 EC.invisibility_of_element(332 (By.XPATH, Const.FACE_RECOGNITION_TEXT_XPATH)333 )334 )335 336 if funcOp == 4:337 try:338 # 이거는 마지막 성공화면이 뜰때까지 기다리는 코드.339 # '본인 인증 완료'340 WebDriverWait(driver, Const.TIMEOUT_FIVE_SECOND).until(341 EC.text_to_be_present_in_element(342 (By.XPATH, Const.COMPLETED_CERTIFICATION_TEXT_XPATH), 343 Const.COMPLETED_CERTIFICATION_TEXT344 )345 )346 347 # 성공 여부 체크348 result = None349 successText = driver.find_element(By.XPATH, Const.COMPLETED_CERTIFICATION_TEXT_XPATH)350 if successText.text == Const.COMPLETED_CERTIFICATION_TEXT:351 result = Const.SUCCESS352 else:353 logger.info('unexcepted message: ' + successText.text)354 result = Const.FAILED355 356 except (TimeoutException) as e:357 # 성공 메시지를 찾지 못하면 실패로 간주하고 진행358 # '얼굴 인증 실패'359 if existsElement(By.XPATH, Const.FAILED_CERTIFICATION_TEXT_XPATH):360 failText = driver.find_element(By.XPATH, Const.FAILED_CERTIFICATION_TEXT_XPATH)361 if failText.text == Const.FAILED_CERTIFICATION_TEXT:362 errorCode = driver.find_element(By.XPATH, Const.FAILED_CERTIFICATION_ERROR_CODE_XPATH)363 logger.info(errorCode.text)364 result = Const.FAILED365 else:366 logger.error(e.msg)367 result = Const.FAILED368 369 elif existsElement(By.XPATH, Const.FAILED_CERTIFICATION_VCARD_ERROR_CODE_TITLE_XPATH):370 # '얼굴 감지 실패'371 vCardErrorTitle = driver.find_element(By.XPATH, Const.FAILED_CERTIFICATION_VCARD_ERROR_CODE_TITLE_XPATH)372 vCardErrorcode = driver.find_element(By.XPATH, Const.FAILED_CERTIFICATION_VCARD_ERROR_CODE_XPATH)373 logger.error(vCardErrorTitle.text + ": " + vCardErrorcode.text)374 result = Const.FAILED375 376 else:377 logger.error(e.msg)378 result = Const.FAILED379 if funcOp == 4:380 logResultToFile(sys._getframe().f_code.co_name)381 clickReTestButton()382def testFaceIdLivenessAccountMode(funcOp = 5, idKindOp = 2):383 """384 신분증 인증 | 얼굴확인(+라이브니스) | 계좌 인증 검사 자동화 테스트385 386 인증 기능 funcOp387 2: 신분증 인증388 3: 신분증 인증 | 얼굴확인 389 4: 신분증 인증 | 얼굴확인(+라이브니스)390 5: 신분증 인증 | 얼굴확인(+라이브니스) | 계좌 인증391 6: 계좌 인증392 7: 신분증 인증 | 계좌 인증393 8: 신분증 인증 | 얼굴확인 | 계좌 인증394 395 신분증 종류 idKindOp396 2: 주민등록증397 3: 운전면허증398 4: 한국 여권399 5: 외국 여권400 6: 외국인등록증401 """402 403 if funcOp == 5:404 connect(Const.TEST_SITE_URL)405 406 testFaceIdLivenessMode(funcOp, idKindOp)407 408 testAccountMode(funcOp, idKindOp)409 410 if funcOp == 5:411 logResultToFile(sys._getframe().f_code.co_name)412 clickReTestButton()413 414 415def testAccountMode(funcOp = 6, idKindOp = 2):416 """417 계좌 인증 검사 자동화 테스트418 419 인증 기능 funcOp420 2: 신분증 인증421 3: 신분증 인증 | 얼굴확인 422 4: 신분증 인증 | 얼굴확인(+라이브니스)423 5: 신분증 인증 | 얼굴확인(+라이브니스) | 계좌 인증424 6: 계좌 인증425 7: 신분증 인증 | 계좌 인증426 8: 신분증 인증 | 얼굴확인 | 계좌 인증427 428 신분증 종류 idKindOp429 2: 주민등록증430 3: 운전면허증431 4: 한국 여권432 5: 외국 여권433 6: 외국인등록증434 """435 if funcOp == 6:436 connect(Const.TEST_SITE_URL)437 438 clickTestMode(funcOp)439 visualLog('KYC click Account Mode')440 enterPrivacyInfo(idKindOp)441 visualLog('KYC enter Privacy Info')442 443 # 계좌 입력 버튼 클릭444 enterAccountBtn = WebDriverWait(driver, Const.TIMEOUT_TEN_SECOND).until(445 EC.element_to_be_clickable(446 (By.XPATH, Const.ENTER_ACCOUNT_BUTTON_XPATH)447 )448 )449 enterAccountBtn.click()450 # 계좌인증 화면이 뜰때까지 기다리는 코드.451 WebDriverWait(driver, Const.TIMEOUT_FIVE_SECOND).until(452 EC.text_to_be_present_in_element(453 (By.XPATH, Const.VERIFICATION_ACCOUNT_TEXT_XPATH), 454 Const.VERIFICATION_ACCOUNT_TEXT455 )456 )457 458 # 은행/증권사 선택 로직459 # 은행이 Default 이므로, 입력한 BANK_NAME 을 은행명 목록과 비교하고,460 # 은행명이 아닌경우 증권사명 목록과 비교하여 정보를 입력하는 로직.461 bankNStockSelectBtn = WebDriverWait(driver, Const.TIMEOUT_FIVE_SECOND).until(462 EC.element_to_be_clickable(463 (By.XPATH, Const.SELECT_BANK_N_STOCK_XPATH)464 )465 )466 bankNStockSelectBtn.click()467 banklist = driver.find_elements(By.XPATH, Const.BANK_LIST_ITEM_XPATH)468 469 visualLog(f'banklist length is {len(banklist)}')470 bankItem = isContainText(Const.BANK_NAME, banklist)471 472 # Const.BANK_NAME 으로 은행명 목록에서 클릭 시도473 if bankItem:474 bankItem.click()475 else:476 # Const.BANK_NAME 이 은행명 목록에 없으면477 # 증권사 Tab 클릭 후, 증권사 목록이 보일 때까지 대기.478 driver.find_element(By.XPATH, Const.STOCK_TAB_XPATH).click()479 WebDriverWait(driver, Const.TIMEOUT_FIVE_SECOND).until(480 EC.presence_of_element_located(481 (By.XPATH, Const.BANK_LIST_ITEM_XPATH))482 )483 484 stocklist = driver.find_elements(By.XPATH, Const.BANK_LIST_ITEM_XPATH)485 # 은행 목록을 얻은 후, 증권사 탭을 눌러, 증권사 목록을 얻을 때, 486 # list[은행 목록 수 + 증권사 목록 수] 되어 반환되는 듯한 현상으로 인해 필터링하는 코드.487 stocklist = [stock for stock in stocklist if stock.text != '']488 visualLog(f'stocklist length is {len(stocklist)}')489 stockItem = isContainText(Const.BANK_NAME, stocklist)490 491 if stockItem:492 stockItem.click()493 else:494 raise Exception(Const.BANK_NAME + '은 은행명/증권사명 목록에 없습니다. 다시 확인 후 값을 수정하고 시도해주세요.')495 496 # 이 방식은 안됨497 # driver.execute_script("arguments[0].innerHTML = ' KB국민 '", bankNStockSelectBtn)498 499 # 계좌번호 입력500 nameTextField = WebDriverWait(driver, Const.TIMEOUT_TEN_SECOND).until(EC.element_to_be_clickable((By.XPATH, Const.ENTER_ACCOUNT_NUMBER_XPATH)))501 nameTextField.send_keys(Const.ACCOUNT_NUMBER)502 503 oneWonSendBtn = driver.find_element(By.XPATH, Const.SEND_ONE_WON_BUTTON_XPATH)504 oneWonSendBtn.click()505 506 try:507 # 여기서 은행 점검 시간 시, catch 문으로 이동.508 WebDriverWait(driver, Const.TIMEOUT_FIVE_SECOND).until(509 EC.presence_of_element_located(510 (By.XPATH, Const.ENTER_VERIFY_CODE_BUTTON_XPATH)511 )512 )513 514 # 5분 내로 인증 번호 4자리 입력하는 로직.515 verifyCodeBtn = WebDriverWait(driver, Const.TIMEOUT_ONE_MINUTE * Const.TIMEOUT_FIVE_SECOND).until(516 EC.element_to_be_clickable(517 (By.XPATH, Const.ENTER_VERIFY_CODE_BUTTON_XPATH)518 )519 )520 verifyCodeBtn.click()521 522 # 이거는 마지막 성공화면이 뜰때까지 기다리는 코드.523 # '본인 인증 완료'524 WebDriverWait(driver, Const.TIMEOUT_FIVE_SECOND).until(525 EC.text_to_be_present_in_element(526 (By.XPATH, Const.COMPLETED_CERTIFICATION_TEXT_XPATH), 527 Const.COMPLETED_CERTIFICATION_TEXT528 )529 )530 531 # 성공 여부 체크532 result = None533 successText = driver.find_element(By.XPATH, Const.COMPLETED_CERTIFICATION_TEXT_XPATH)534 if successText.text == Const.COMPLETED_CERTIFICATION_TEXT:535 result = Const.SUCCESS536 else:537 logger.info('unexcepted message: ' + successText.text)538 result = Const.FAILED539 540 except (TimeoutException) as e:541 # 성공 메시지를 찾지 못하면 실패로 간주하고 진행542 # '유효시간 만료로 인해 인증에 실패'543 if existsElement(By.XPATH, Const.FAILED_VERIFICATION_TEXT_XPATH):544 failText = driver.find_element(By.XPATH, Const.FAILED_VERIFICATION_TEXT_XPATH)545 if failText.text == Const.FAILED_VERIFICATION_TEXT:546 logger.error(failText.text)547 result = Const.FAILED548 549 # 입력한 정보가 본인과 맞지 않다는 오류 처리 필요.550 else:551 logger.error(e.msg)552 result = Const.FAILED553 554 if funcOp == 6:555 logResultToFile(sys._getframe().f_code.co_name)556 clickReTestButton()557def testIdCardAccountMode(funcOp = 7, idKindOp = 2):558 """559 신분증 인증 | 계좌 인증 검사 자동화 테스트560 561 인증 기능 funcOp562 2: 신분증 인증563 3: 신분증 인증 | 얼굴확인 564 4: 신분증 인증 | 얼굴확인(+라이브니스)565 5: 신분증 인증 | 얼굴확인(+라이브니스) | 계좌 인증566 6: 계좌 인증567 7: 신분증 인증 | 계좌 인증568 8: 신분증 인증 | 얼굴확인 | 계좌 인증569 570 신분증 종류 idKindOp571 2: 주민등록증572 3: 운전면허증573 4: 한국 여권574 5: 외국 여권575 6: 외국인등록증576 """577 if funcOp == 7:578 visualLog('KYC click Id Card Account Mode') 579 connect(Const.TEST_SITE_URL)580 581 testIdCardMode(funcOp, idKindOp)582 583 testAccountMode(funcOp, idKindOp)584 585 if funcOp == 7:586 logResultToFile(sys._getframe().f_code.co_name)587 clickReTestButton()588def testFaceIdAccountMode(funcOp = 8, idKindOp = 2):589 """590 신분증 인증 | 얼굴확인 | 계좌 인증 검사 자동화 테스트591 592 인증 기능 funcOp593 2: 신분증 인증594 3: 신분증 인증 | 얼굴확인 595 4: 신분증 인증 | 얼굴확인(+라이브니스)596 5: 신분증 인증 | 얼굴확인(+라이브니스) | 계좌 인증597 6: 계좌 인증598 7: 신분증 인증 | 계좌 인증599 8: 신분증 인증 | 얼굴확인 | 계좌 인증600 601 신분증 종류 idKindOp602 2: 주민등록증603 3: 운전면허증604 4: 한국 여권605 5: 외국 여권606 6: 외국인등록증607 """608 if funcOp == 8:609 visualLog('KYC click Face Id Account Mode')610 connect(Const.TEST_SITE_URL)611 612 testFaceIdMode(funcOp, idKindOp)613 614 testAccountMode(funcOp, idKindOp)615 616 if funcOp == 8:617 logResultToFile(sys._getframe().f_code.co_name)618 clickReTestButton()619 620 621 622 623def connect(url):624 """625 # MAIN 페이지626 """627 628 visualLog(sys._getframe().f_code.co_name)629 630 # 페이지 가져오기 (접속)631 driver.get(url)632 logger.info(url)633 # 화면 크기 지정634 # Windows Xbox Record로 녹화하려면 창 크기 변경 후, 녹화를 시작해야 한다.635 # driver.set_window_rect(0, 0, 800, 1000) # 특정 좌표(x,y)와 크기(width,height)로 변경636 # Debug Window 설정 여부 버튼637 postMsgToggleBtn = driver.find_element(638 By.XPATH, Const.POST_MSG_TOGGLE_BUTTON_XPATH)639 # postMsgToggleBtn.click()640 # 개인정보 옵션 체크박스641 privacyOpCheckBtn = driver.find_element(642 By.XPATH, Const.PRIVACY_OPTION_CHECK_XPATH)643 privacyOpCheckBtn.click()644def clickTestMode(funcOp):645 """646 2: 신분증 인증647 3: 신분증 인증 | 얼굴확인 648 4: 신분증 인증 | 얼굴확인(+라이브니스)649 5: 신분증 인증 | 얼굴확인(+라이브니스) | 계좌 인증650 6: 계좌 인증651 7: 신분증 인증 | 계좌 인증652 8: 신분증 인증 | 얼굴확인 | 계좌 인증653 """654 655 if driver:656 xPath = {657 2: r'//*[@id="logic-options"]/ul/li[1]/img',658 3: r'//*[@id="logic-options"]/ul/li[2]/img',659 4: r'//*[@id="logic-options"]/ul/li[3]/img',660 5: r'//*[@id="logic-options"]/ul/li[4]/img',661 6: r'//*[@id="logic-options"]/ul/li[5]/img',662 7: r'//*[@id="logic-options"]/ul/li[6]/img',663 8: r'//*[@id="logic-options"]/ul/li[7]/img'664 }.get(funcOp, "없는 메뉴")665 666 # 테스트할 기능 버튼667 targetBtn = driver.find_element(By.XPATH, xPath)668 targetBtn.click()669 else:670 logger.info('Please call connect() first.')671 func = {672 2: '신분증 인증',673 3: '신분증 인증 | 얼굴확인',674 4: '신분증 인증 | 얼굴확인(+라이브니스)',675 5: '신분증 인증 | 얼굴확인(+라이브니스) | 계좌 인증',676 6: '계좌 인증',677 7: '신분증 인증 | 계좌 인증',678 8: '신분증 인증 | 얼굴확인 | 계좌 인증'679 }.get(funcOp, "없는 메뉴")680 681 logger.info(f'선택한 메뉴는 {func} 입니다.')682def enterPrivacyInfo(idKindOp):683 """684 # 개인정보 입력 페이지685 """686 687 if driver:688 # 개인정보 입력 페이지는 iframe 으로 옮겨서 검사해야 코드로 접근이 가능함689 kycIframe = driver.find_element(By.CSS_SELECTOR, 'iframe')690 if kycIframe:691 iframeId = kycIframe.get_attribute('id')692 if(iframeId == Const.KYC_IFRAME_TEXT):693 driver.switch_to.frame(kycIframe)694 # driver.implicitly_wait(5) # 묵시적 대기, 활성화를 주어진 시간만큼까지 기다린다.695 # EC.element_to_be_clickable - 해당 Element가 클릭 가능할 때까지 주어진 시간만큼 기다린다.696 nameTextField = WebDriverWait(driver, Const.TIMEOUT_ONE_MINUTE).until(EC.element_to_be_clickable((By.XPATH, getNameInputXPath(idKindOp))))697 nameTextField.send_keys(getUserName(idKindOp))698 699 phoneTextField = driver.find_element(By.XPATH, getPhoneInputXPath(idKindOp))700 phoneTextField.send_keys(Const.USER_PHONE)701 birthTextField = driver.find_element(By.XPATH, getBirthInputXPath(idKindOp))702 birthTextField.send_keys(getUserBirth(idKindOp))703 emailTextField = driver.find_element(By.XPATH, getEmailInputXPath(idKindOp))704 emailTextField.send_keys(Const.USER_EMAIL)705 # 다음 버튼 클릭706 nextBtn = driver.find_element(By.XPATH, Const.NEXT_BUTTON_XPATH)707 nextBtn.click()708 709 else:710 logger.info('The iframe id is incorrect. Expected: "kyc_iframe" Actual: ', iframeId)711 else:712 logger.info('Please call connect() first.')713def selectTypeOfId(idKindOp):714 """715 # 신분증 메뉴 선택 페이지716 """717 718 if driver:719 # EC.element_to_be_clickable - 해당 Element가 클릭 가능할 때까지 주어진 시간만큼 기다린다.720 choiceIdBtn = WebDriverWait(driver, Const.TIMEOUT_ONE_MINUTE).until(EC.element_to_be_clickable((By.XPATH, getSelectTypeOfIdXPath(idKindOp))))721 # choiceIdBtn = driver.find_element(By.XPATH, getSelectTypeOfIdXPath(idKindOp))722 choiceIdBtn.click()723 724 nextBtn = driver.find_element(By.XPATH, Const.SELECT_COMPLETE_BUTTON_XPATH)725 nextBtn.click()726 else:727 logger.info('Please call connect() first.')728def uploadIdImageFile(idKindOp):729 """730 # 신분증 사진 업로드 페이지731 """732 733 if driver:734 #UPLOAD_IMAGE_BUTTON_XPATH 는 input type file 로 따로 잡아서 사용735 driver.find_element(By.CSS_SELECTOR, "input[type='file']").send_keys(getIdImageFilePath(idKindOp))736 737 submitIdBtn = driver.find_element(By.XPATH, Const.SUBMIT_ID_BUTTON_XPATH)738 submitIdBtn.click()739 740 driver.switch_to.active_element741 # EC.element_to_be_clickable - 해당 Element가 클릭 가능할 때까지 주어진 시간만큼 기다린다.742 submitBtn = WebDriverWait(driver, Const.TIMEOUT_ONE_MINUTE).until(EC.element_to_be_clickable((By.XPATH, Const.SUBMIT_BUTTON_XPATH)))743 submitBtn.click()744 else:745 logger.info('Please call connect() first.')746def verifyEnteredIdInfo(idKindOp):747 """748 # 개인정보 확인 페이지749 """750 751 try:752 if driver:753 # EC.element_to_be_clickable - 해당 Element가 클릭 가능할 때까지 주어진 시간만큼 기다린다.754 nextBtn = WebDriverWait(driver, Const.TIMEOUT_ONE_MINUTE).until(EC.element_to_be_clickable((By.XPATH, getVerifyIdInfoPageNextBtnXPath(idKindOp))))755 nextBtn.click()756 757 byTxt = By.CLASS_NAME758 targetTxt = 'v-card'759 760 # v-card 가 표시되면 진행 중 오류가 발생한 것으로 간주.761 if existsElement(byTxt, targetTxt):762 raise Exception(driver.find_element(byTxt, targetTxt))763 else:764 raise Exception('Please call connect() first.')765 766 except Exception as e:767 if e.args.__len__() > 0 and isinstance(e.args[0], WebElement):768 logger.error(str(e.args[0].text))769 else :770 logger.error(str(e))771 772 raise e773def getNameInputXPath(funcOpNum):774 xPath = {775 2: r'//*[@id="app"]/div[1]/div/div[4]/div/input',776 3: r'//*[@id="app"]/div[1]/div/div[4]/div/input',777 4: r'//*[@id="app"]/div[1]/div/div[4]/div/input',778 5: r'//*[@id="app"]/div[1]/div/div[4]/div/input',779 6: r'//*[@id="app"]/div[1]/div/div[4]/div/input'780 }.get(funcOpNum, "없는 메뉴")781 782 return xPath783def getPhoneInputXPath(funcOpNum):784 xPath = {785 2: r'//*[@id="app"]/div[1]/div/div[6]/div/input',786 3: r'//*[@id="app"]/div[1]/div/div[6]/div/input',787 4: r'//*[@id="app"]/div[1]/div/div[6]/div/input',788 5: r'//*[@id="app"]/div[1]/div/div[6]/div/input',789 6: r'//*[@id="app"]/div[1]/div/div[6]/div/input'790 }.get(funcOpNum, "없는 메뉴")791 792 return xPath793def getBirthInputXPath(funcOpNum):794 xPath = {795 2: r'//*[@id="app"]/div[1]/div/div[8]/div/input',796 3: r'//*[@id="app"]/div[1]/div/div[8]/div/input',797 4: r'//*[@id="app"]/div[1]/div/div[8]/div/input',798 5: r'//*[@id="app"]/div[1]/div/div[8]/div/input',799 6: r'//*[@id="app"]/div[1]/div/div[8]/div/input'800 }.get(funcOpNum, "없는 메뉴")801 802 return xPath803def getEmailInputXPath(funcOpNum):804 xPath = {805 2: r'//*[@id="app"]/div/div/div[10]/div/input', 806 3: r'//*[@id="app"]/div/div/div[10]/div/input', 807 4: r'//*[@id="app"]/div/div/div[10]/div/input',808 5: r'//*[@id="app"]/div/div/div[10]/div/input',809 6: r'//*[@id="app"]/div/div/div[10]/div/input'810 }.get(funcOpNum, "없는 메뉴")811 812 return xPath813def getSelectTypeOfIdXPath(idKindOpNum):814 """815 신분증 종류 번호 [2 ~ 6]816 2: 주민등록증817 3: 운전면허증818 4: 한국 여권819 5: 외국 여권820 6: 외국인등록증821 """822 823 xPath = {824 2: r'//*[@id="app"]/div[1]/div/div/div[5]',825 3: r'//*[@id="app"]/div[1]/div/div/div[6]',826 4: r'//*[@id="app"]/div[1]/div/div/div[7]',827 5: r'//*[@id="app"]/div[1]/div/div/div[8]',828 6: r'//*[@id="app"]/div[1]/div/div/div[9]'829 }.get(idKindOpNum, "없는 메뉴")830 func = {831 2: '주민등록증',832 3: '운전면허증',833 4: '한국 여권',834 5: '외국 여권',835 6: '외국인등록증'836 }.get(idKindOpNum, "없는 메뉴")837 838 logger.info(f'선택한 신분증 종류는 {func} 입니다.')839 840 return xPath841def getIdImageFilePath(idKindOpNum):842 filePath = {843 2: 'C:\\idCard.jpg',844 3: 'C:\\driversLicense.jpg',845 4: 'C:\\passPort.jpg',846 5: 'C:\\foreignPassPort.jpg',847 6: 'C:\\alienRegistrationCard.jpg'848 }.get(idKindOpNum, "없는 메뉴")849 850 return filePath851def getVerifyIdInfoPageNextBtnXPath(idKindOpNum):852 """853 신분증 정보 확인 페이지854 """855 856 xPath = {857 2: r'//*[@id="app"]/div[1]/div/div[12]/div[2]',858 3: r'//*[@id="app"]/div[1]/div/div[14]/div[2]',859 4: r'//*[@id="app"]/div[1]/div/div[16]/div[2]',860 5: r'//*[@id="app"]/div[1]/div/div[14]/div[2]',861 6: r'//*[@id="app"]/div[1]/div/div[12]/div[2]'862 }.get(idKindOpNum, "없는 메뉴")863 864 return xPath865def getUserName(funcOpNum):866 xPath = {867 2: Const.USER_NAME,868 3: Const.USER_NAME,869 4: Const.PASSPORT_USER_NAME,870 5: Const.FOREIGN_USER_NAME,871 6: Const.REGISTERED_FOREIGN_USER_NAME872 }.get(funcOpNum, "없는 메뉴")873 874 return xPath875def getUserBirth(funcOpNum):876 xPath = {877 2: Const.USER_BIRTH,878 3: Const.USER_BIRTH,879 4: Const.PASSPORT_USER_BIRTH,880 5: Const.FOREIGN_USER_BIRTH,881 6: Const.REGISTERED_FOREIGN_USER_BIRTH882 }.get(funcOpNum, "없는 메뉴")883 884 return xPath885def visualLog(contents):886 """887 로그 파일에서 눈에 잘 띄게 contents를 남기는 함수\n888 ────\n889 connect\n890 ────\n891 Args:892 contents (str): 로그 파일에 작성될 내용893 """894 895 horizontalChr = '─'896 horizontalStr = ''897 898 for i in range(len(contents)):899 horizontalStr += horizontalChr900 logger.info(horizontalChr + horizontalStr + horizontalChr)901 logger.info(contents)902 logger.info(horizontalChr + horizontalStr + horizontalChr)903def logResultToFile(funcName, loggingStartWord = '"review_result"'):904 """905 : 한줄로 전체 내용이 넘어오는 review_result 파싱 결과를906 : 다음과 같이 User Readerable한 형태로 로그파일에 추가907 Args:908 funcName (str): 호출하는 함수명을 입력받기 위해 sys._getframe().f_code.co_name 을 입력하여 사용.909 loggingStartWord (str, optional): 기록을 시작할 위치를 나타내는 문자열.910 : Defaults to '"review_result"'. ex) 'WORD'911 : 문자열을 변경할때는 apostrophe 내부에 작성해야 한다.912 913 Result:914 "review_result":{"id":578915 "request_time":"2022-03-10T04:12:10.699Z"916 "name":"사용자명"917 "phone_number":"사용자번호"918 "birthday":"생년월일"919 "result_type":1920 "result_email":1921 "result_sms":2922 "module":{"id_card_ocr":true923 "id_card_verification":true924 "face_authentication":false925 "account_verification":false926 "liveness":false}927 "id_card":{"modified":false928 "verified":true929 "id_card_image":"/9j/4AAQSkZJRgABAQEAYABgAAD//gA+Q1JFQVRPUj...생략930 "id_crop_image":null931 "original_ocr_data":"{\"idType\":\"1\"932 \"userName\":\"사용자명\"933 \"juminNo1\":\"주민등록번호 앞자리\"934 \"juminNo2\":\"주민등록번호 뒷자리\"935 \"_juminNo2\":\"2******\"936 \"issueDate\":\"발급일자\"937 \"transaction_id\":\"125978368062297a9ca145e1646885532\"}"938 "modified_ocr_data":null939 "is_manual_input":false940 "is_uploaded":true941 "id_card_origin":"/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST...생략942 "face_check":null943 "account":null}944 "api_response":{"result_code":"N100"945 "result_message":"결과 메시지"}946 "result":"성공 여부"}"947 """948 try:949 # 'goog:loggingPrefs'950 prefName = 'browser'951 952 logger.info(prefName + ': Logging start.')953 resultTargetWord = '"result":'954 result = ''955 956 # 너무 빨리 얻어와서 값이 없는 경우 대비하는 코드957 while True:958 perf = driver.get_log(prefName)959 if len(perf) > 2: break960 961 for p in perf:962 # Readerable한 형태로 만들기 위한 replace 순서가 있음963 strLog = p['message'].replace(',"', ',\n"').replace('\\"', '"').replace('\\\\', '\\')964 965 if loggingStartWord in strLog:966 splited = strLog[967 strLog.index(loggingStartWord):968 ].split(",")969 for x in splited:970 for y in x.split(","):971 if resultTargetWord in y:972 # 수행 결과 단어를 필터하기 위한 split 코드973 result = y[len(resultTargetWord) + 1:len(y) - 3]974 logger.info(y)975 976 visualLog(funcName + ' ' + result)977 978 except Exception as e:979 logger.info(prefName + ': Empty.')980def openLogFile():981 subprocess.run(['explorer', file_handler.baseFilename])982def existsElement(by: By, target: string):983 try:984 WebDriverWait(driver, Const.TIMEOUT_TEN_SECOND).until(EC.presence_of_element_located((by, target)))985 986 except (TimeoutException, NoSuchElementException) as e:987 return False988 989 return True990def isContainText(target: string, list):...

Full Screen

Full Screen

0009_auto_20170619_1112.py

Source:0009_auto_20170619_1112.py Github

copy

Full Screen

1# -*- coding: utf-8 -*-2# Generated by Django 1.10.6 on 2017-06-19 11:123from __future__ import unicode_literals4import datetime5from django.db import migrations, models6class Migration(migrations.Migration):7 dependencies = [8 ('users', '0008_auto_20170619_1108'),9 ]10 operations = [11 migrations.AlterModelOptions(12 name='visuallog',13 options={'verbose_name': 'VisualLog', 'verbose_name_plural': 'VisualLog'},14 ),15 migrations.AlterField(16 model_name='pcguid',17 name='addtime',18 field=models.DateTimeField(blank=True, default=datetime.datetime(2017, 6, 19, 11, 12, 54, 275731), null=True, verbose_name='登录验证时间'),19 ),20 migrations.AlterField(21 model_name='pcguidlog',22 name='addtime',23 field=models.DateTimeField(default=datetime.datetime(2017, 6, 19, 11, 12, 54, 276375), verbose_name='loginTime'),24 ),25 migrations.AlterField(26 model_name='visuallog',27 name='addtime',28 field=models.DateTimeField(default=datetime.datetime(2017, 6, 19, 11, 12, 54, 277298), verbose_name='loginTime'),29 ),...

Full Screen

Full Screen

KYC-demo-select- driver's-license.py

Source:KYC-demo-select- driver's-license.py Github

copy

Full Screen

...4import time5import KYC6import Const7KYC.connect(Const.TEST_SITE_URL)8KYC.visualLog('=== KYC connect ===')9KYC.clickIdCardMode()10KYC.visualLog('=== KYC clickIdCardMode ===')11KYC.enterPrivacyInfo()12KYC.visualLog('=== KYC enterPrivacyInfo ===')13KYC.selectTypeOfId()14KYC.visualLog('=== KYC selectDriversLicense ===')15KYC.uploadIdImageFile()16KYC.visualLog('=== KYC uploadDriversLicenseFile ===')17KYC.verifyEnteredIdInfo()18KYC.visualLog('=== KYC verifyIdCardInfo ===')19KYC.visualLog('=== TEST SUCCESS ===')...

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run fMBT automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful