def test_pay_org(browser, cache): log.info('开始运行医技执行科室收费脚本') login.select_workstation(browser, '医技工作站', cache) # 工作站是否打开 #获取申请单及执行科室 application_type_list = ['检验单', '治疗单', '病理类', '检查单'] #对所有申请单进行归类整理,把执行科室相同的申请单归为一类 for application_type in application_type_list: diction = cache.get(application_type) if diction: application = list(diction.keys()) executive_department_list = list(diction.values()) for t in list(set(executive_department_list)): on_click(browser, (By.XPATH, '//button[contains(text(),"【")]')) #选择工作站 executive_department_name = HOSPITA_AREA + ': ' + t select_dept(browser, '选择工作台', executive_department_name, (By.XPATH, select_window.选择工作站)) on_click(browser, (By.XPATH, "//button[contains(text(),'确定')]")) # is_refresh(browser,browser.find_element_by_xpath('//div[contains(text(),"门诊执行收退费")]')) element_wait(browser, (By.XPATH, '//div[contains(text(),"门诊执行收退费")]')) on_click(browser, (By.XPATH, '//div[contains(text(),"门诊执行收退费")]')) on_click(browser, (By.LINK_TEXT, '门诊执行科室收费')) # 刷卡 date = time.strftime("%Y-%m-%d", time.localtime()) send_value(browser, (By.XPATH, application_list.开单时间), '2017-06-15') send_value(browser, (By.XPATH, patient_message.卡号), cache.get('patient_card') + '\n') # 勾选是否打印 on_click(browser, (By.XPATH, '//label[contains(text(),"是否打印收费凭证")]')) first_pos = 0 for i in range(executive_department_list.count(t)): element_inexistence( browser, (By.XPATH, "//div[contains(text(),'正在加载')]")) new_list = executive_department_list[first_pos:] next_pos = new_list.index(t) + 1 index = first_pos + new_list.index(t) first_pos += next_pos locator = (By.XPATH, '//div[contains(text(),"%s")]' % application[index]) on_click(browser, locator) # time.sleep(2) element_inexistence( browser, (By.XPATH, "//div[contains(text(),'正在加载')]")) application_detail_text = browser.find_element_by_xpath( application_detail.申请单计费明细列表).text if application_detail_text.strip() != '': on_click(browser, (By.XPATH, '//button[contains(text(),"收费(Enter)")]')) on_click(browser, (By.XPATH, '//button[contains(text(),"是")]')) else: log.info('%s申请单已计费' % application[index]) element_wait(browser, (By.XPATH, application_detail.申请单计费明细列表)) browser.refresh()
def invoice_record_query(browser, cache): login.select_workstation(browser, '门诊挂号收费工作台', cache) # 工作站是否打开 on_click(browser, (By.XPATH, '//div[contains(text(),"发票打印管理")]')) on_click(browser, (By.LINK_TEXT, '发票记录查询')) if element_wait(browser, (By.XPATH, '//span[contains(text(),"验证最小票据号窗口")]')): usename = get_text(browser, (By.XPATH, head.用户)).split('(')[0] bill_num = find_min_ticket(usename, '门诊收费发票') send_value(browser, (By.XPATH, verify_bill_window.票据号), bill_num) #输入票据号 on_click(browser, (By.XPATH, verify_bill_window.确定)) send_value(browser, (By.XPATH, query_area.刷卡), cache.get('patient_card') + '\n') end_time = time.time() + 1 while True: consume_collection = get_text( browser, (By.XPATH, invoice_history_list.发票记录)) if consume_collection != '暂无可显示票据记录...': break if time.time() > end_time: log.info('加载消费单失败') break return True else: log.info('验证最小票据号窗口弹出异常') return False
def test_arrearage_settle_accounts(browser, cache): log.info('开始运行欠费结账脚本') login.select_workstation(browser, '门诊挂号收费工作台', cache) # 工作站是否打开 on_click(browser, (By.XPATH, '//div[contains(text(),"欠费管理")]')) on_click(browser, (By.LINK_TEXT, '欠费结账/退费')) boolen = get_prompt(browser) if boolen: if re.sub('\D', '', boolen) == '0': log.info(boolen) return else: on_click(browser, (By.XPATH, "//button[contains(text(),'确定')]")) #刷卡 send_value(browser, (By.XPATH, patient_message.刷卡), cache.get('patient_card') + '\n') on_click(browser, (By.XPATH, '//button[contains(text(),"收 费")]')) on_click(browser, (By.XPATH, '//button[contains(text(),"是")]')) text = get_text(browser, (By.XPATH, "//label")) if "交款方式" not in text: microsoft_xps_document_writer('欠费结账单') else: send_value(browser, (By.XPATH, recharge_window.支付类型), '1') on_click(browser, (By.XPATH, '//button[contains(text(),"确认")]')) on_click(browser, (By.XPATH, '//button[contains(text(),"是")]')) microsoft_xps_document_writer('欠费结账充值单')
def test_repair_reg(browser, testcase, cache): log.info('开始运行补打挂号单脚本') login.select_workstation(browser, '门诊挂号收费工作台', cache) # 工作站是否打开 on_click(browser, (By.XPATH, '//div[contains(text(),"门诊挂号")]')) on_click(browser, (By.LINK_TEXT, '补打挂号单')) #刷卡 for i in range(0, 3): send_value(browser, (By.XPATH, head_button.就诊卡号), testcase[repair_reg['patient_card']] + '\n') locator = (By.XPATH, repair_reg_body.号源列表 + '//tr') num = len(browser.find_elements(locator[0], locator[1])) # 号源列表的数量 send_value(browser, (By.XPATH, head_button.查询条件), testcase[repair_reg['doctor_name']]) list_message = [ testcase[repair_reg['special_name']], testcase[repair_reg['special_type']], testcase[repair_reg['outp_time']] ] boolen = filter_lists(browser, locator, list_message, num, 'button') if not boolen: log.info('没有号源信息') return if boolen[9] == '3' or ('已达次数上限' in boolen): if boolen[9] == '3' and ('已达次数上限' in boolen): log.info('补打挂号单验证pass') break else: log.info('补打挂号单验证fail') break on_click(browser, (By.XPATH, '//button[contains(text(),"是")]')) Utility.microsoft_xps_document_writer('补打挂号单') log.info('补打挂号单脚本运行结束')
def calendar(browser, remove_js,focus_js, input_locator,img_locator,date): browser.execute_script(remove_js) send_value(browser,input_locator,date) browser.execute_script(focus_js) time.sleep(2) on_click(browser, img_locator) browser.find_element_by_xpath("//button[contains(text(),'今天')]").send_keys(Keys.ENTER)
def test_plus_sign(browser, testcase, cache): log.info('开始运行加号脚本') login.select_workstation(browser, '门诊挂号收费工作台', cache) # 工作站是否打开 on_click(browser, (By.XPATH, '//div[contains(text(),"门诊挂号")]')) on_click(browser, (By.LINK_TEXT, '加号')) # 调取挂号验证模板 RegSource = dao.outp_regist_master(testcase) temp.outp_reg_source_temp(RegSource) current_no = RegSource.OutpRegMaster.current_no current_limits = RegSource.OutpRegMaster.current_limits #刷卡 send_value(browser, (By.XPATH, PlusSignInput.swipe_card), (testcase[plus_sign['patient_card']] + '\n')) #输入科室名称进行过滤 num = len( browser.find_elements(By.XPATH, PlusSignDiv.special_list + '//tr')) send_value(browser, (By.XPATH, PlusSignInput.doctor_name), testcase[plus_sign['doctor_name']]) locator = (By.XPATH, PlusSignDiv.special_list + '//tr') list_message = [testcase[plus_sign['special_name']]] if not filter_lists(browser, locator, list_message, num, 'button'): log.info('没有号源信息') return on_click(browser, (By.XPATH, '//button[contains(text(),"是")]')) #判断提示框中的内容是否正确 if get_prompt(browser): prompt_text = get_prompt(browser) on_click(browser, (By.XPATH, '//button[contains(text(),"确定" )]')) else: browser.refresh() # 调取挂号验证模板 RegSourceAfter = dao.outp_regist_master(testcase) temp.outp_reg_source_temp(RegSourceAfter) # 数据验证 if RegSourceAfter.OutpRegMaster.current_no - current_no == 0 and current_limits - RegSourceAfter.OutpRegMaster.current_limits == 0: Utility.writeFile('当前号和已挂数 pass') else: Utility.writeFile('当前号和已挂数 fail') business_type = cache.get('business_type') if not business_type: cache.set('business_type', [[ '加号', testcase[plus_sign['name']], testcase[plus_sign['special_name']], testcase[plus_sign['outp_time']], testcase[plus_sign['doctor_name']] ]]) else: business_type.append([ '加号', testcase[plus_sign['name']], testcase[plus_sign['special_name']], testcase[plus_sign['outp_time']], testcase[plus_sign['doctor_name']] ]) log.info('挂号留号运行结束')
def test_arrearage_return_premium(browser, cache): log.info('开始运行欠费退费脚本') login.select_workstation(browser, '门诊挂号收费工作台', cache) # 工作站是否打开 on_click(browser, (By.XPATH, '//div[contains(text(),"欠费管理")]')) on_click(browser, (By.LINK_TEXT, '欠费结账/退费')) boolen = get_prompt(browser) if boolen: if re.sub('\D', '', boolen) == '0': log.info(boolen) return else: on_click(browser, (By.XPATH, "//button[contains(text(),'确定')]")) #刷卡 send_value(browser, (By.XPATH, patient_message.刷卡), cache.get('patient_card') + '\n') end_time = time.time() + 1 # arrearage_list_text = '' #欠费记账列表信息 while True: arrearage_list_text = get_text(browser, (By.XPATH, arrearage_list.欠费记账患者列表)) if '暂无可显示的欠费病人信息' not in arrearage_list_text: break if time.time() > end_time: log.info('欠费记账患者列表加载超时') return lists = ['处方单', '毒麻单', '检查单', '检验单', '治疗单', '皮试单', '输液单', '草药', '病理类'] applys = [] #所有申请单号 for appply_type in lists: applycation = cache.get(appply_type) if applycation: applys = applys + list(applycation) for apply_id in applys: if is_selected(browser, ((By.XPATH, arrearage_list.全选))): on_click(browser, (By.XPATH, arrearage_list.全选)) rek_no = find_rek_no(apply_id) if rek_no == []: log.info('%s申请单未计费或已退费' % rek_no) continue elif rek_no in arrearage_list_text: on_click(browser, (By.XPATH, '//div[contains(text(),"%s")]' % rek_no)) on_click(browser, (By.XPATH, '//div[contains(text(),"退 费")]')) element_wait(browser, (By.XPATH, '//span[contains(text(),"欠费记账退费窗口")]')) if '正常' in get_text(browser, (By.XPATH, arrearage_return_premium.退费列表)): webElement = browser.find_elements_by_xpath( arrearage_return_premium.退费列表 + '//label[contains(text(),"正常")]') for element in webElement: element.click() on_click(browser, (By.XPATH, '//button[contains(text(),"确定退费")]')) on_click(browser, (By.XPATH, '//button[contains(text(),"是")]')) microsoft_xps_document_writer('欠费退费单')
def pds_emr(browser,list,pdsList,cache): on_click(browser, (By.XPATH, CpoeOutOrderElement.input[9]['key'])) js = "document.getElementsByTagName('img')[54].click()" browser.execute_script(js) # tyElement = browser.find_element_by_xpath( # str(CpoeOutOrderElement.select[3]['key']) + 'div[' + str(list[0]) + ']') # tyElement.click() on_click(browser, (By.XPATH, '//div[contains(text(),"药疗")]')) pdsNameElement1 = browser.find_element_by_xpath(CpoeOutOrderElement.input[9]['key']) pdsNameElement1.send_keys(list[1]) time.sleep(1.5) pdsNameElement1.send_keys(Keys.ENTER) if list[2] == 1: takeMedicineElement = browser.find_element_by_xpath(CpoeOutOrderElement.input[3]['key']) takeMedicineElement.click() time.sleep(1.5) useLevelElement = browser.find_element_by_xpath(CpoeOutOrderElement.input[10]['key']) useLevelElement.send_keys(list[3]) #途径 send_value(browser,(By.XPATH,'/html/body/div[1]/div/div[2]/div[1]/div[2]/div[1]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div/div/div/div[2]/div[2]/div[1]/div[8]/div[3]/div/div[1]/div/input'),'口服') time.sleep(1.5) browser.find_element_by_xpath('/html/body/div[1]/div/div[2]/div[1]/div[2]/div[1]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div/div/div/div[2]/div[2]/div[1]/div[8]/div[3]/div/div[1]/div/input').send_keys(Keys.ENTER) #频次 js = "document.getElementsByTagName('img')[58].click()" browser.execute_script(js) time.sleep(1.5) browser.find_element_by_xpath( '/html/body/div[1]/div/div[2]/div[1]/div[2]/div[1]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div/div/div/div[2]/div[2]/div[1]/div[8]/div[4]/div/div[1]/div/input').send_keys( Keys.ENTER) #疗程 send_value(browser, (By.XPATH, '/html/body/div[1]/div/div[2]/div[1]/div[2]/div[1]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div/div/div/div[2]/div[2]/div[1]/div[8]/div[6]/div/div[1]/div/input'), '1') browser.find_element_by_xpath( '/html/body/div[1]/div/div[2]/div[1]/div[2]/div[1]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div/div/div/div[1]/div[2]/div[1]/div/div[5]/div/div[1]/div/input').send_keys( Keys.ENTER) time.sleep(1.5) js = "document.getElementsByTagName('button')[13].click()" browser.execute_script(js) cache.set('actionDepartment', '门诊药房') listUrl = '医嘱' Utility.microsoft_xps_document_writer(listUrl)
def get_sign(browser, testcase): #刷卡 locator = (By.XPATH, body.卡号) send_value(browser, locator, testcase[plus_sign['patient_card']] + '\n') on_click(browser, (By.XPATH, '//button[text()="否"]')) #获取号源列表 special_list = browser.find_element(By.XPATH, body.号源列表) if '没有可显示的数据....' in special_list.text: log.info('没有加号信息') return locator = (By.XPATH, body.号源列表 + '//tr') list_message = [ testcase[plus_sign['special_name']], testcase[plus_sign['doctor_name']] ] if not select_lists(browser, locator, list_message): log.info('没有号源信息') return locator = (By.XPATH, '//button[text()="取 号"]') on_click(browser, locator) Utility.microsoft_xps_document_writer('挂号单')
def test_pay_refund(browser, cache): log.info('开始运行预付费退费(窗口)脚本') login.select_workstation(browser, '门诊挂号收费工作台', cache) # 工作站是否打开 on_click(browser, (By.XPATH, '//div[contains(text(),"门诊退费管理")]')) on_click(browser, (By.LINK_TEXT, '预付费退费(窗口)')) boolen = get_prompt(browser) if boolen: if re.sub('\D', '', boolen) == '0': log.info(boolen) return else: on_click(browser, (By.XPATH, "//button[contains(text(),'确定')]")) lists = ['处方单', '毒麻单', '检查单', '检验单', '治疗单', '皮试单', '输液单', '草药', '病理类'] rek_no_list = [] for list_type in lists: applys = cache.get(list_type) if applys == None: continue for apply_id in list(applys.keys()): result = find_rek_no(apply_id) if result != []: rek_no_list.append(result.Rek.rek_no) else: log.info('%s申请单未收费或已退费' % apply_id) for rek_no in rek_no_list: # print(rek_no) send_value(browser, (By.XPATH, query_area.缴费流水号), rek_no + '\n') apply_status = get_text(browser, (By.XPATH, list_area.退费明细列表 + '//label')) if '正常' in apply_status: status_elements = browser.find_elements_by_xpath(list_area.退费明细列表 + '//label') for status_element in status_elements: status_element.click() if '取消' in get_text(browser, (By.XPATH, list_area.退费明细列表 + '//label')): on_click(browser, (By.XPATH, query_area.退费)) on_click(browser, (By.XPATH, '//button[contains(text(),"确定")]')) microsoft_xps_document_writer('退费单') on_click(browser, (By.XPATH, '//button[contains(text(),"确定")]')) log.info('运行预付费退费(窗口)脚本结束')
def click_application(browser, application_type_list, cache): for application_type in application_type_list: diction = cache.get(application_type) if diction: application_list = list(diction.keys()) executive_department_list = list(diction.values()) for t in list(set(executive_department_list)): # 刷卡 send_value(browser, (By.XPATH, head_button.刷卡), cache.get('patient_card') + '\n') # 判断弹出窗口是否正确弹出 if not is_text(browser, (By.XPATH, application_list_window.申请单列表), '申请单列表'): log.info('没有找到申请单列表窗口') return apply_messages = get_text( browser, (By.XPATH, application_list_window.申请单信息)) if application_type in ['处方单', '毒麻单', '草药']: on_click(browser, (By.XPATH, "//span[contains(text(),'全部药品')]")) date = time.strftime("%Y-%m-%d", time.localtime()) send_value(browser, (By.XPATH, application_list_window.开始时间), '2017-6-12') on_click(browser, (By.XPATH, "//button[contains(text(),'查询(Q)')]")) first_pos = 0 status = False #执行状态 for i in range(executive_department_list.count(t)): new_list = executive_department_list[first_pos:] next_pos = new_list.index(t) + 1 index = first_pos + new_list.index(t) print(application_list[index]) first_pos += next_pos locator = (By.XPATH, '//div[contains(text(),"' + application_list[index] + '")]') if application_list[index] in apply_messages: status = True focus(browser, locator) else: log.info('不存在%s申请单' % application_list[index]) if not status: on_click(browser, (By.XPATH, '//button[contains(text(),"取消(C)")]')) continue on_click(browser, (By.XPATH, "//button[contains(text(),'确定(S)')]")) time.sleep(0.5) send_value(browser, (By.XPATH, body.缴费方式), '\n') if get_prompt(browser): on_click(browser, (By.XPATH, "//button[contains(text(),'是')]")) microsoft_xps_document_writer(application_type) log.info('欠费记账脚本运行结束')
def pds_emr_login(browser,list,pdsList,cache): # typeElement1 = browser.find_element_by_xpath(CpoeOutOrderElement.img[5]['key']) # typeElement1.click() # time.sleep(2) on_click(browser,(By.XPATH,CpoeOutOrderElement.input[9]['key'])) js = "document.getElementsByTagName('img')[54].click()" browser.execute_script(js) # tyElement = browser.find_element_by_xpath( # str(CpoeOutOrderElement.select[3]['key']) + 'div[' + str(list[0]) + ']') # tyElement.click() on_click(browser,(By.XPATH,'//div[contains(text(),"药疗")]')) pdsNameElement1 = browser.find_element_by_xpath(CpoeOutOrderElement.input[9]['key']) pdsNameElement1.send_keys(list[1]) time.sleep(1.5) pdsNameElement1.send_keys(Keys.ENTER) if list[2] == 1: takeMedicineElement = browser.find_element_by_xpath(CpoeOutOrderElement.input[3]['key']) takeMedicineElement.click() time.sleep(1.5) useLevelElement = browser.find_element_by_xpath(CpoeOutOrderElement.input[10]['key']) useLevelElement.send_keys(list[3]) # tuJinElement = browser.find_element_by_xpath(CpoeOutOrderElement.img[6]['key']) # tuJinElement.click() # js = "document.getElementsByTagName('img')[57].click()" # browser.execute_script(js) # time.sleep(2) # browser.find_element_by_xpath('//div[contains(text(),"口服")]').send_keys(Keys.ENTER) send_value(browser,(By.XPATH,'/html/body/div[1]/div/div[2]/div[1]/div[2]/div[1]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div/div/div/div[2]/div[2]/div[1]/div[6]/div[3]/div/div[1]/div/input'),'口服') time.sleep(1.5) browser.find_element_by_xpath('/html/body/div[1]/div/div[2]/div[1]/div[2]/div[1]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div/div/div/div[2]/div[2]/div[1]/div[6]/div[3]/div/div[1]/div/input').send_keys(Keys.ENTER) js = "document.getElementsByTagName('img')[58].click()" browser.execute_script(js) time.sleep(1.5) browser.find_element_by_xpath('/html/body/div[1]/div/div[2]/div[1]/div[2]/div[1]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div/div/div/div[2]/div[2]/div[1]/div[6]/div[4]/div/div[1]/div/input').send_keys(Keys.ENTER) # liaoChenElement = browser.find_element_by_xpath(CpoeOutOrderElement.input[11]['key']) # liaoChenElement.send_keys(list[6]) # liaoChenElement.send_keys(Keys.ENTER) send_value(browser,(By.XPATH,'/html/body/div[1]/div/div[2]/div[1]/div[2]/div[1]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div/div/div/div[2]/div[2]/div[1]/div[6]/div[6]/div/div[1]/div/input'),'1') browser.find_element_by_xpath('/html/body/div[1]/div/div[2]/div[1]/div[2]/div[1]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div/div/div/div[2]/div[2]/div[1]/div[6]/div[6]/div/div[1]/div/input').send_keys(Keys.ENTER) time.sleep(1.5) js = "document.getElementsByTagName('button')[13].click()" browser.execute_script(js) cache.set('actionDepartment','门诊药房') listUrl = '医嘱' Utility.microsoft_xps_document_writer(listUrl) # if __name__ == '__main__': # browser = common.browser() # testcase = {'用户名': 'jfli', '密码': '123456'} # cache = Cache({}) # cache.set('resultType',1) # cache.set('specialName', '眼科门诊') # cache.set('patient_card','%E?;1004627675=99015017425?+E?') # login.test_login(browser, testcase, cache) # emrList = {'诊断类别': '2', '诊断名称': '神经痛'} # # test_workstation(browser, cache) # # test_diagnose(browser, emrList, cache) # pdsList = {'途径': 1, '患者姓名': 'ray', '用药目的': '', '诊断类别': 1, '患者卡号': '%E?;1004627675=99015017425?+E?', '诊断名称': '神经痛', '频次': 1, '每次用量': 1, '医嘱类型': 3, '是否带药': 0, '医嘱名称拼音码': 'wwsjn', '执行科室': '', '疗程': 1} # test_emr_pds(browser, pdsList, cache)
def test_revise(browser, testcase, cache): log.info('开始运行号源调整脚本') # 判断门诊办公室工作站是否打开 login.select_workstation(browser, '门诊办公室工作站', cache) locator = (By.XPATH, '//div[contains(text(),"号源管理")]') on_click(browser, locator) locator = (By.LINK_TEXT, '号源调整') on_click(browser, locator) #输入日期 calendar_element = browser.find_element(By.XPATH, Input.date) js = "document.getElementsByTagName('input')[1].removeAttribute('readonly')" browser.execute_script(js) calendar_element.clear() calendar_element.send_keys(time.strftime("%Y-%m-%d", time.localtime())) js = "document.getElementsByTagName('input')[1].blur()" browser.execute_script(js) locator = (By.XPATH, Img.calendar_img) on_click(browser, locator) browser.find_element_by_xpath("//button[contains(text(),'今天')]").send_keys( Keys.ENTER) # 输入门诊科室 browser.find_element(By.XPATH, Input.belong_clinic_code).clear() browser.find_element(By.XPATH, Input.belong_clinic_code).send_keys( testcase[plus_sign['clinic_code']]) locator = (By.XPATH, '//div[contains(text(),"光谷院区")]') on_click(browser, locator) #输入医生 browser.find_element(By.XPATH, Input.doctor).clear() browser.find_element(By.XPATH, Input.doctor).send_keys( testcase[plus_sign['doctor_code']]) locator = (By.XPATH, '//div[contains(text(),"' + testcase[plus_sign['doctor_name']] + '")]') on_click(browser, locator) #选择专家号 locator = (By.XPATH, '//label[contains(text(),"专家")]') on_click(browser, locator) outp_time_dict = {'上午': 8, '下午': 19, '晚上': 30} #判断是否存在相同号源 special_element = browser.find_element(By.XPATH, Div.special_list).find_elements( By.TAG_NAME, 'tr') if len(special_element) > 1: log.info('存在相同号源') # print(browser.find_element_by_xpath(Div.special_list+'//td[8]').text) num = outp_time_dict[testcase[plus_sign['outp_time']]] locator = (By.XPATH, Div.special_list + '//td[' + str(num) + ']') on_click(browser, locator) reg_num = browser.find_element(By.XPATH, Div.special_list).find_elements( By.TAG_NAME, 'td')[num + 1].text #已挂数 appoint_num = browser.find_element(By.XPATH, Div.special_list).find_elements( By.TAG_NAME, 'td')[num + 4].text #预约数 #判断号源详情弹出窗是否弹出 locator = (By.XPATH, Div.special_detail) if is_text(browser, locator, '号源详情'): send_value(browser, (By.XPATH, Input.appoint_limit_no), str(int(appoint_num) + 1)) send_value(browser, (By.XPATH, Input.limit_no), str(int(reg_num) + 1)) locator = (By.XPATH, '//button[contains(text(),"保存")]') on_click(browser, locator) locator = (By.XPATH, '//button[contains(text(),"是")]') on_click(browser, locator) else: log.info('号源详情窗口未弹出') log.info('号源调整脚本运行结束')
def test_businessCard(browser, cache): #start login login.select_workstation(browser, '基础费用管理', cache) # 点击左边菜单 on_click(browser, (By.XPATH, "//span[contains(text(), '患者信息查询')]")) # 点击二级菜单 on_click(browser, (By.XPATH, "//span[contains(text(), '批量制卡')]")) # #清除垃圾数据 # elements = browser.find_elements_by_xpath("//button[contains(text(), '生成卡磁道')]") # print(len(elements)) # # for i in range(len(elements)): # if len(elements) >= 1: # browser.find_element_by_xpath("//button[contains(text(), '生成卡磁道')]").click() # browser.find_element_by_xpath("//button[contains(text(), '是')]").click() # time.sleep(1) # # else: # break # # time.sleep(2) # # elements2 = browser.find_elements_by_xpath("//button[contains(text(), '确认')]") # print(len(elements2)) # # for i in range(len(elements2)): # if len(elements2) >= 1: # browser.find_element_by_xpath("//button[contains(text(), '确认')]").click() # browser.find_element_by_xpath("//button[contains(text(), '是')]").click() # time.sleep(1) # # else: # break # 输入预计制卡数量,点击批量生成 send_value(browser, (By.XPATH, "//input"), '1') on_click(browser, (By.XPATH, "//button[contains(text(), '生成批次')]")) #获取压缩文件时间,用于匹配压缩文件 # now = time.strftime("%Y%m%d%H", time.localtime()) # time.sleep(1) # 点击生成磁道 time.sleep(1) browser.find_elements(By.XPATH, "//button[contains(text(), '生成卡磁道')]")[0].click() on_click(browser, (By.XPATH, "//button[contains(text(), '是')]")) # 点击下载 time.sleep(2) browser.find_elements(By.XPATH, "//button[contains(text(), '下载')]")[0].click() on_click(browser, (By.XPATH, "//button[contains(text(), '是')]")) # 点击确认 end_time = time.time() + 500 time.sleep(2) while True: time.sleep(1) text = get_text(browser, (By.XPATH, '//span')) if '提示' not in text: print('提示不存在') break if time.time() > end_time: log.info('页面加载超时') return on_click(browser, (By.XPATH, "//button[contains(text(), '确认')]")) on_click(browser, (By.XPATH, "//button[contains(text(), '是')]")) # 匹配下载文件 f = browser.find_element_by_xpath( "/html/body/div[1]/div/div[2]/div[1]/div[2]/div[2]/div/div/div[2]/div[2]/div/div[1]/div[1]/div[2]/div/div[1]/table/tbody/tr/td[1]/div" ) fname = f.text #使用获取页面的批次号来匹配压缩文件 for i in os.listdir(path.download_dir): #获取指定下载文件夹所有文件 if (i.split(".")[0].find(fname)) > 0: #使用字符串对比匹配到下载文件 fpath = os.path.join(path.download_dir, i) #生成解压文件路径 zip = zipfile.ZipFile(fpath) zipname = zip.namelist() #返回压缩包中所有文件的文件名 zip.extractall() #解压所有文件 zip.close() f = open(zipname[0]) lines = f.readline() # print(lines) f.close() # 拼写制卡卡号 card = '%E?;' + lines.rstrip('\n').split("|")[1] + '?+E?' cache.set('patient_card', card) log.info(card) Utility.writeFile(card) # 删除解压文件 if os.path.exists(zipname[0]): os.remove(zipname[0])
def test_invoice_print(browser, cache): log.info('开始运行发票打印脚本') login.select_workstation(browser, '门诊挂号收费工作台', cache) # 工作站是否打开 on_click(browser, (By.XPATH, '//div[contains(text(),"发票打印管理")]')) on_click(browser, (By.LINK_TEXT, '发票打印')) if element_wait(browser, (By.XPATH, '//span[contains(text(),"验证最小票据号窗口")]')): usename = get_text(browser, (By.XPATH, head.用户)).split('(')[0] bill_num = find_min_ticket(usename, '门诊收费发票') send_value(browser, (By.XPATH, verify_bill_window.票据号), bill_num) #输入票据号 on_click(browser, (By.XPATH, verify_bill_window.确定)) send_value(browser, (By.XPATH, query_area.刷卡), cache.get('patient_card') + '\n') lists = ['处方单', '毒麻单', '检查单', '检验单', '治疗单', '皮试单', '输液单', '草药', '病理类'] rek_no_list = [] for list_type in lists: applys = cache.get(list_type) if applys == None: continue for apply_id in list(applys.keys()): result = find_rek_no(apply_id) if result != []: rek_no_list.append(result.Rek.rek_no) else: log.info('%s申请单未收费或已退费' % apply_id) end_time = time.time() + 1 while True: consume_collection = get_text(browser, (By.XPATH, consume_list.消费记录)) if consume_collection != '查询暂无结算消费记录': break if time.time() > end_time: log.info('加载消费单失败') break # print(rek_no_list) if rek_no_list == []: log.info('没有需要打印的单据') return status = False reks = [] for rek_no in rek_no_list: if rek_no in consume_collection: focus(browser, (By.XPATH, '//div[contains(text(),"%s")]' % rek_no)) reks.append(rek_no) status = True else: log.info('%s消费单不存在或已作废' % rek_no) cache.set('rek_no_list', reks) if status: for rek_no in rek_no_list: end_time = time.time() + 1 while True: if rek_no in get_text( browser, (By.XPATH, application_detail_list.费用明细)): break if time.time() > end_time: log.info('加载消费明细失败') break on_click(browser, (By.XPATH, '//button[contains(text(),"打印")]')) on_click(browser, (By.XPATH, '//button[contains(text(),"确 定")]')) on_click(browser, (By.XPATH, '//button[contains(text(),"是")]')) microsoft_xps_document_writer('发票单') else: log.info('验证最小票据号窗口弹出异常') log.info('发票打印脚本运行结束')
def test_leave_sign(browser, testcase, cache): log.info('开始运行留号脚本') login.select_workstation(browser, '门诊挂号收费工作台', cache) # 工作站是否打开 on_click(browser, (By.XPATH, '//div[contains(text(),"门诊挂号")]')) on_click(browser, (By.LINK_TEXT, '留号')) # 调取挂号验证模板 RegSource = dao.outp_regist_master(testcase) if RegSource != None: temp.outp_reg_source_temp(RegSource) current_no = RegSource.OutpRegMaster.current_no current_limits = RegSource.OutpRegMaster.current_limits #刷卡 locator = (By.XPATH, body.卡号) send_value(browser, locator, testcase[leave_sign['patient_card']] + '\n') #输入日期 remove_js = "document.getElementsByClassName('x-triggerfield-noedit')[0].removeAttribute('readonly')" focus_js = "document.getElementsByClassName('x-triggerfield-noedit')[0].blur()" input_locator = (By.XPATH, head_button.就诊时间) img_locator = (By.XPATH, head_button.日期图标) date = testcase[leave_sign['visit_time']] calendar(browser, remove_js, focus_js, input_locator, img_locator, date) locator = (By.XPATH, body.号源列表 + '//tr') num = len(browser.find_elements(locator[0], locator[1])) #输入医生名 select_locator = (By.XPATH, head_button.查询条件) send_value(browser, select_locator, testcase[leave_sign['doctor_name']]) list_message = [ testcase[leave_sign['outp_time']], testcase[leave_sign['special_name']] ] if not filter_lists(browser, locator, list_message, num, 'button'): log.info('没有号源信息') return on_click(browser, (By.XPATH, '//button[contains(text(),"是")]')) # 调取挂号验证模板 RegSource = dao.outp_regist_master(testcase) if RegSource != None: RegSourceAfter = dao.outp_regist_master(testcase) temp.outp_reg_source_temp(RegSourceAfter) # 数据验证 if RegSourceAfter.OutpRegMaster.current_no - current_no == 1 and current_limits - RegSourceAfter.OutpRegMaster.current_limits == 1: Utility.writeFile('当前号和已挂数 pass') else: Utility.writeFile('当前号和已挂数 fail') business_type = cache.get('business_type') if not business_type: cache.set('business_type', [[ '留号', testcase[leave_sign['name']], testcase[leave_sign['special_name']], testcase[leave_sign['outp_time']], testcase[leave_sign['doctor_name']], testcase[leave_sign['visit_time']] ]]) else: business_type.append([ '留号', testcase[leave_sign['name']], testcase[leave_sign['special_name']], testcase[leave_sign['outp_time']], testcase[leave_sign['doctor_name']], testcase[leave_sign['visit_time']] ]) log.info('挂号留号运行结束')