def test_order_sign_list(browser, cache): log.info('开始运行内部挂号列表脚本') login.select_workstation(browser, '门诊挂号收费工作台', cache) # 工作站是否打开 on_click(browser, (By.XPATH, '//div[contains(text(),"门诊挂号")]')) on_click(browser, (By.LINK_TEXT, '内部挂号列表')) # send_value(browser,(By.XPATH,head_button.查询条件),cache['name']) special_element = browser.find_element(By.XPATH, body.号源列表) if '没有可显示的数据....' in special_element.text: log.info('内部挂号没有号源信息') return locator = (By.XPATH, body.号源列表 + '/div') list_messages = cache['business_type'] if not list_messages: log.info('内部挂号没有号源信息') return for list_message in list_messages: boolen = select_lists(browser, locator, list_message) if boolen: if boolen[0] == '留号': index = 12 if boolen[0] == '加号': index = 13 if boolen and boolen[index] == '未取号': on_click(browser, (By.XPATH, '//button[contains(text(),"取消预约")]')) on_click(browser, (By.XPATH, '//button[contains(text(),"是")]')) else: log.info('内部挂号列表验证fail') return
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 test_workstation(browser, cache): log.info('开始运行工作站选择脚本') #判断该工作站是否打开 login.select_workstation(browser, '门诊医生站', cache) if int(cache['resultType']) != 1: return # 选取工作站 time.sleep(1) workstationElement = browser.find_element_by_xpath( CpoeOutOrderElement.button[0]['key']) workstationElement.click() browser.implicitly_wait(30) workstationInputElement = browser.find_element_by_xpath( CpoeOutOrderElement.input[0]['key']) time.sleep(2) workstationInputElement.clear() time.sleep(2) workstationInputElement.send_keys("光谷院区: " + cache.get('specialName')) time.sleep(1) sureElement = browser.find_element_by_xpath( CpoeOutOrderElement.button[1]['key']) sureElement.click() browser.implicitly_wait(30)
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 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_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 test_diagnose(browser, diagnoseList, registCache): log.info('开始运行诊断脚本') #判断该工作站是否打开 login.select_workstation(browser, '门诊医生站', registCache) time.sleep(2) #进入患者列表界面 browser.find_element_by_xpath(CpoeOutOrderElement.div[3]['key']).click() # browser.find_element_by_xpath("//button[contains(text(),'确定')]") # browser.find_element_by_xpath(CpoeOutOrderElement.a[0]['key']).click() browser.find_element_by_link_text('门诊患者列表').click() dict = TestCaseCodeTable.diagnose #刷卡 cardElement = browser.find_element_by_xpath( CpoeOutOrderElement.input[1]['key']) cardElement.send_keys(registCache.get('patient_card') + '\n' + '\n') browser.implicitly_wait(30) time.sleep(2) #就诊 #患者列表区域 usersElement = browser.find_element_by_xpath( CpoeOutOrderElement.div[1]['key']).find_elements_by_tag_name('tr') userElement = usersElement[0].find_elements_by_tag_name('div')[0] userText = userElement.text ActionChains(browser).double_click(userElement).perform() browser.implicitly_wait(30) time.sleep(2) #诊断 if userText == "已就诊": return diagnoseElement = browser.find_element_by_xpath( CpoeOutOrderElement.button[2]['key']) diagnoseElement.click() browser.implicitly_wait(30) diagnoseTypeElement = browser.find_element_by_xpath( CpoeOutOrderElement.img[4]['key']) diagnoseTypeElement.click() diagElement = browser.find_element_by_xpath( CpoeOutOrderElement.select[int(diagnoseList[dict['dia_type']]) - 1]['key']) diagElement.click() time.sleep(2) diaChooseElement = browser.find_element_by_xpath( CpoeOutOrderElement.input[7]['key']) diaChooseElement.send_keys(diagnoseList[dict['dia_name']]) time.sleep(2) diaChooseElement.send_keys(Keys.ENTER) saveElement = browser.find_element_by_xpath( CpoeOutOrderElement.button[3]['key']) saveElement.click() browser.implicitly_wait(30) time.sleep(1) log.info('诊断脚本运行结束')
def test_bill_print(browser,cache): #判断门诊医生站是否打开 login.select_workstation(browser, '门诊医生站', cache) cpoeManager=BillPrintElement.div[1]['key'] functionTable=BillPrintElement.table[0]['key'] billType=BillPrintElement.ul[0]['key'] billList=BillPrintElement.div[0]['key'] cpoeManagerElement=browser.find_element_by_xpath(cpoeManager) cpoeManagerElement.click() time.sleep(2) elements = browser.find_elements_by_tag_name('a') for element in elements: if element.text == '单据打印': element.click() break time.sleep(2) # printElement=browser.find_element_by_xpath(functionTable).find_elements_by_tag_name('button')[0] # billTypeElemnts=browser.find_element_by_xpath(billType).find_elements_by_tag_name('span') # for i in range(0,len(billTypeElemnts)): # if "处方单" in billTypeElemnts[i].text: # billTypeElemnts[i].click() billListElements=browser.find_element_by_xpath(billList).find_elements_by_tag_name('tr') application_dict = {} bill_name = '' num = -1 for i in range(0,len(billListElements)): bill_detail_elements = billListElements[i].find_elements_by_tag_name('td') if len(bill_detail_elements)<2: span_elements = billListElements[i].find_elements_by_tag_name('span') if len(span_elements) == 2 and '张' in span_elements[1].text: application_dict = {} if num != -1: billListElements[num].find_element_by_tag_name('input').click() bill_name = str(span_elements[1].text).split('(')[0] billListElements[i].find_element_by_tag_name('input').click() num = i continue else: if billListElements[i].find_element_by_tag_name('input').is_selected(): bill_elements = billListElements[i+1].find_elements_by_tag_name('td') application_dict[str(bill_elements[0].text).strip()] = bill_elements[3].text cache.set(bill_name,application_dict) continue
def test_prepay(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 = ['处方单', '毒麻单', '检查单', '检验单', '治疗单', '皮试单', '输液单', '草药', '病理类'] click_application(browser,lists,cache) # 收费状态 cache.set('prepay_status',1)
def test_quit_sign_list(browser, cache): log.info('开始运行退号信息列表脚本') login.select_workstation(browser, '门诊挂号收费工作台', cache) # 工作站是否打开 on_click(browser, (By.XPATH, '//div[contains(text(),"门诊挂号")]')) on_click(browser, (By.LINK_TEXT, '退号信息列表')) remove_js = 'document.getElementsByTagName("input")[26].removeAttribute("readonly")' focus_js = "document.getElementsByTagName('input')[26].blur()" input_locator = (By.XPATH, head_button.退号开始日期) img_locator = (By.XPATH, head_button.退号开始日历) date = time.strftime("%Y-%m-%d", time.localtime()) calendar(browser, remove_js, focus_js, input_locator, img_locator, date) on_click(browser, (By.XPATH, '//button[contains(text(),"查询")]')) if select_lists(browser, (By.XPATH, body.号源列表), cache.get('quit_sign')): log.info('退号列表显示pass') else: log.info('退号列表显示pass') log.info('退号信息列表脚本运行结束')
def test_emr_pds(browser,pdsList,cache): # 判断门诊医生站是否打开 login.select_workstation(browser, '门诊医生站', cache) #进入医嘱开立界面 browser.find_element_by_xpath(CpoeOutOrderElement.div[4]['key']).click() time.sleep(2) element = browser.find_element_by_link_text('门诊医嘱开立') element.click() browser.find_element_by_xpath(CpoeOutOrderElement.input[12]['key']).send_keys(str(cache.get('patient_card'))+'\n') time.sleep(2) browser.find_element_by_xpath(CpoeOutOrderElement.input[12]['key']).click() dict = TestCaseCodeTable.cpoe_out_order type = pdsList[dict['cpoe_type']] pdsName = pdsList[dict['cpoe_name']] takeMedicine = pdsList[dict['is_outpresc']] useLevel = pdsList[dict['dosage']] tuJin = pdsList[dict['way']] pinCi = pdsList[dict['frequency']] liaoChen = pdsList[dict['course_treat']] aim = pdsList[dict['treat_pur']] list=[type,pdsName,takeMedicine,useLevel,tuJin,pinCi,liaoChen,aim] pdsEmrs = [] pdsEmrs.append(pdsList) #判断药疗医嘱是否开立 if cache.get('pds_emr'): cache.set('pds_emr',cache.get('pds_emr')+pdsEmrs) else: cache.set('pds_emr',pdsEmrs) #医嘱区域 # try: doctorAdviceElement=browser.find_element_by_xpath(CpoeOutOrderElement.div[0]['key']) if '没有可显示的数据' in doctorAdviceElement.text: pds_emr_login(browser,list,pdsList,cache) submit.test_cpoe_submit(browser,'处方笺') else: pds_emr(browser, list, pdsList, cache) submit.test_cpoe_submit(browser, '处方笺')
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 test_get_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, '取留号')) # 调取挂号验证模板 Fee = dao.outp_balance(testcase) temp.outp_fee_temp(Fee) RegSource = dao.outp_regist_master(testcase) temp.outp_reg_source_temp(RegSource) OfficeRegSource = dao.outp_patient_visit(testcase) temp.outp_office_reg_source_temp(OfficeRegSource) balance = Fee.PcaPrepayAccountMaster.balance current_no = RegSource.OutpRegMaster.current_no current_limits = RegSource.OutpRegMaster.current_limits get_sign(browser, testcase) # 调取挂号验证模板 FeeAfter = dao.outp_balance(testcase) temp.outp_fee_temp(FeeAfter) RegSourceAfter = dao.outp_regist_master(testcase) temp.outp_reg_source_temp(RegSourceAfter) OfficeRegSourceAfter = dao.outp_patient_visit(testcase) temp.outp_office_reg_source_temp(OfficeRegSourceAfter) # 数据验证 if (balance - FeeAfter.PcaPrepayAccountMaster.balance ) == testcase[leave_sign['regist_fee']]: Utility.writeFile('患者挂号扣费 pass') else: Utility.writeFile('患者挂号扣费 fail') if RegSourceAfter.OutpRegMaster.current_no - current_no == 0 and current_limits - RegSourceAfter.OutpRegMaster.current_limits == 0: Utility.writeFile('当前号和已挂数 pass') else: Utility.writeFile('当前号和已挂数 fail') if OfficeRegSourceAfter[0] - OfficeRegSource[0] == 1: Utility.writeFile('门办已挂数 pass') else: Utility.writeFile('门办已挂数 fail') log.info('取留号脚本运行结束')
def choice_loss(browser, test_case, cache): login.select_workstation(browser, '门诊挂号收费工作台', cache) #工作站是否打开 browser.find_element(By.XPATH, '//div[contains(text(),"门诊挂号")]').click() browser.find_element(By.LINK_TEXT, '就诊卡挂失').click() browser.find_element(By.XPATH, InputLocator.name).clear() browser.find_element(By.XPATH, InputLocator.name).send_keys(test_case[loss['name']]) browser.find_element(By.XPATH, InputLocator.id_type).clear() browser.find_element(By.XPATH, InputLocator.id_type).send_keys('居民身份证') browser.find_element(By.XPATH, InputLocator.id_card).clear() browser.find_element(By.XPATH, InputLocator.id_card).send_keys( test_case[loss['id_card']]) browser.find_element(By.XPATH, InputLocator.phone_num).clear() browser.find_element(By.XPATH, InputLocator.phone_num).send_keys( test_case[loss['phone_num']]) browser.implicitly_wait(30) if element_wait(browser, (By.XPATH, '//button[contains(text(),"查询")]')): browser.find_element(By.XPATH, '//button[contains(text(),"查询")]').click() locator = (By.XPATH, DivLocator.checkbox) if element_wait(browser, locator): browser.find_element(By.XPATH, DivLocator.checkbox).click() #选择患者 else: log.info('没查询到该患者信息!')
def test_outbill_prepay_refuse(browser, cache): #判断门诊挂号收费工作站是否打开 login.select_workstation(browser, '门诊挂号收费工作台', cache) #获取退费管理菜单元素 outbill_refund = OutbillPrepayRefuseElement.div[0]['key'] #获取预付费缴费(执行科室退费)元素 outbpre_refuse = OutbillPrepayRefuseElement.a[0]['key'] #获取提示框 alert = OutbillPrepayRefuseElement.button[0]['key'] #获取申请单列表区域元素 apply_list = OutbillPrepayRefuseElement.div[1]['key'] #获取患者信息元素 patient_message = OutbillPrepayRefuseElement.form[0]['key'] #获取退费明细列表区域元素 refund_detail = OutbillPrepayRefuseElement.div[2]['key'] #获取卡号元素 card = OutbillPrepayRefuseElement.div[3]['key'] #获取按钮区域元素 button = OutbillPrepayRefuseElement.div[4]['key'] #患者信息列表 patient_message_dict = {} #申请单号列表 apply_card = [] #是否退费 sure_button = OutbillPrepayRefuseElement.button[1]['key'] #退费金额合计 refund_count = OutbillPrepayRefuseElement.b[0]['key'] outbill_refund_element = browser.find_element_by_xpath(outbill_refund) outbill_refund_element.click() browser.implicitly_wait(30) outbpre_refuse_element = browser.find_element_by_xpath(outbpre_refuse) outbpre_refuse_element.click() browser.implicitly_wait(30) alert_element = browser.find_element_by_xpath(alert) alert_element.click() card_element = browser.find_element_by_xpath( card).find_elements_by_tag_name('input') card_element[0].clear() card_element[0].send_keys(str(cache.get('patient_card')) + '\n') patient_message_elements = browser.find_element_by_xpath( patient_message).find_elements_by_tag_name('input') # for i in range(0,len(patient_message_elements)): # patient_message_list.append(patient_message_elements[i].text) patient_message_dict['patient_id'] = patient_message_elements[0].text patient_message_dict['balance'] = patient_message_elements[1].text # 数据校验 ''' ''' apply_list_element = browser.find_element_by_xpath( apply_list).find_elements_by_tag_name('tr') for i in range(0, len(apply_list_element)): apply_element = apply_list_element[i].find_elements_by_tag_name('div') for j in range(0, len(apply_element)): if cache.get('apply_date') == apply_element[j].text: apply_element[j].click() browser.implicitly_wait(30) time.sleep(2) refund_detail_elements = browser.find_element_by_xpath( refund_detail).find_elements_by_tag_name('table') # print(len(refund_detail_elements)) for i in range(0, len(refund_detail_elements)): apply_text = refund_detail_elements[ i].find_elements_by_tag_name('div')[7].text apply_card.append(apply_text) print(apply_card) if set(apply_card).issubset(set(cache.get('apply_card'))): patient_message_dict[ 'refund_count'] = browser.find_element_by_xpath( refund_count) ''' 数据校验 ''' on_click(browser, (By.XPATH, '//button[contains(text(),"退费")]')) on_click(browser, (By.XPATH, '//button[contains(text(),"确定")]')) time.sleep(4) listUrl = '退费发票单' Utility.microsoft_xps_document_writer(listUrl) browser.implicitly_wait(30) on_click(browser, (By.XPATH, '//button[contains(text(),"确定")]')) return else: apply_card = [] browser.refresh()
def test_regist_button(browser, test_case, cache): login.select_workstation(browser, '门诊挂号收费工作台', cache) #验证取号按钮功能 browser.find_element_by_xpath( '//button[contains(text(),"取 号(U)")]').click() locator = (By.XPATH, '//button[contains(text(),"取 号")]') if element_wait(browser, locator): log.info('取号按钮功能pass') else: log.info('取号按钮功能fail') browser.refresh() #验证退号按钮功能 browser.find_element_by_xpath( '//button[contains(text(),"退 号(X)")]').click() locator = (By.XPATH, div[4]['key']) if is_text(browser, locator, '门诊退号'): log.info("退号按钮功能pass") browser.find_element_by_xpath( '//button[contains(text(),"关闭")]').click() else: log.info("退号按钮功能fail") #验证重置按钮功能 dict = TestCaseCodeTable.patient_visit_card cardElement = \ browser.find_element_by_xpath(form[0]['key']).find_elements_by_tag_name('input')[3] cardElement.clear() cardElement.send_keys(test_case[dict['patient_card']] + '\n') browser.find_element_by_xpath('//button[contains(text(),"否")]').click() browser.find_element_by_xpath('//button[contains(text(),"重置")]').click() text = browser.find_element_by_xpath( form[0]['key']).find_elements_by_tag_name('input')[0].get_attribute( 'value') if text == '': log.info('重置按钮功能pass') else: log.info('重置按钮功能fail') #验证号别过滤及门诊时间过滤 result = 1 #全部 all_boxs = browser.find_elements_by_xpath('//label[contains(text(),"全部")]') for box in all_boxs: box.click() lists = outp_message(browser) if len(list(set(lists[0]))) > 1 and len(list(set(lists[1]))) > 1: # log.info('全部按钮验证pass') pass elif len(list(set(lists[0]))) == 1 and ('急诊' in lists[0]): # log.info('全部按钮验证pass') pass else: # log.info('全部按钮验证fail') result = 0 #全天,普通和急诊 browser.find_element_by_xpath('//label[contains(text(),"全天")]').click() browser.find_element_by_xpath('//label[contains(text(),"普通和急诊")]').click() lists = outp_message(browser) for outp_type in lists[0]: if outp_type in ('普通', '急诊'): # log.info('普通急诊按钮验证pass') pass else: # log.info('普通急诊按钮验证fail') result = 0 if list(set(lists[1])) in (['全天'], []): # log.info('全天按钮验证pass') pass else: # log.info('全天按钮验证fail') result = 0 #上午,专家 type_locator = '//label[contains(text(),"上午")]' date_locator = '//label[contains(text(),"专家")]' verify(browser, type_locator, date_locator, '上午', '专家', result) #下午,业余 type_locator = '//label[contains(text(),"下午")]' date_locator = '//label[contains(text(),"业余")]' verify(browser, type_locator, date_locator, '下午', '业余', result) #晚上,保健 type_locator = '//label[contains(text(),"晚上")]' date_locator = '//label[contains(text(),"保健")]' verify(browser, type_locator, date_locator, '晚上', '保健', result) if result: log.info('号源过滤按钮验证pass') else: log.info('号源过滤按钮验证fail')
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('挂号留号运行结束')
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_prepayment(browser, userList, cache): # 参数化数据 d = TestCaseCodeTable.prepayment print(userList) # 切换到工作站 login.select_workstation(browser, '门诊挂号收费工作台', cache) # 点击菜单进入就诊卡办理页面 e = browser.find_element_by_xpath("//div[contains(text(), '门诊缴费管理')]") e.click() time.sleep(3) browser.find_element_by_xpath("//a[contains(text(), '预付费充值')]").click() #点击确定 browser.find_element_by_xpath("//button[contains(text(), '确定')]").click() #刷卡 e = browser.find_element_by_xpath( "//label[contains(text(), '卡信息')]/parent::div/div/div/child::input") # e.send_keys("%E?;2501218839=99015016158?+E?" + "\n") e.send_keys(str(cache.get('patient_card')) + "\n") #汉字输入验证 browser.find_element_by_xpath("//label[contains(text(), '汉字')]").click() time.sleep(2) e2 = browser.find_element_by_xpath( "/html/body/div[8]/div[2]/div[1]/div/div/div/fieldset/div/div/div[5]/div/div[1]/div/div[1]/div/input" ) j = userList[d['patient_name']][1:2] print(j) time.sleep(2) e2.send_keys(j) #截取名字第二个字 #点击确定 time.sleep(1) browser.find_element_by_xpath("//button[contains(text(), '确定')]").click() #选择支付方式 time.sleep(1) e3 = browser.find_element_by_xpath( "//label[contains(text(), '支付方式')]/parent::div/div/div/child::input") e3.send_keys(userList[d['payment_code']]) #应收费用输入 time.sleep(1) e4 = browser.find_element_by_xpath( "/html/body/div[1]/div/div[2]/div[1]/div[2]/div[1]/div[2]/div/div[1]/div[2]/div[1]/div[2]/div[2]/div[1]/div/div[2]/div[1]/div[1]/div/div/div[2]/div/div[1]/div/div[1]/div/input" ) f = userList[d['recharge_number']] print(f) e4.send_keys(f) #实收费用输入 time.sleep(1) e5 = browser.find_element_by_xpath( "/html/body/div[1]/div/div[2]/div[1]/div[2]/div[1]/div[2]/div/div[1]/div[2]/div[1]/div[2]/div[2]/div[1]/div/div[2]/div[1]/div[1]/div/div/div[2]/div/div[2]/div/div[1]/div/input" ) f2 = userList[d['recharge_number']] e5.send_keys(f2) #点击确认 e5.send_keys("\n" + "\n" + "\n") browser.find_element_by_xpath("//button[contains(text(), '是')]").click() #工作站页面刷新 browser.refresh() time.sleep(2) print("充值成功") #打印信息 time.sleep(2) e7 = browser.find_element_by_xpath( "/html/body/div[1]/div/div[2]/div[1]/div[2]/div[1]/div[2]/div/div[1]/div[2]/div[1]/div[3]/div/div[1]/div[1]/div[2]" ) y1 = ["患者ID:", "姓名:", "金额:", "支付方式:", "预交金流水号:"] x1 = [] for i in list(e7.text.split("\n")): x1.append(i) d = dict((x, y) for x, y in zip(y1, x1)) print(d)
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_emr_ers(browser, test_case, cache): # 判断门诊医生站是否打开 login.select_workstation(browser, '门诊医生站', cache) # 进入医嘱开立界面 browser.find_element_by_xpath(CpoeOutOrderElement.div[4]['key']).click() time.sleep(2) elements = browser.find_elements_by_tag_name('a') for element in elements: if element.text == '门诊医嘱开立': element.click() break # browser.find_element_by_xpath(CpoeOutOrderElement.a[1]['key']) browser.find_element_by_xpath( CpoeOutOrderElement.input[12]['key']).send_keys( str(cache.get('patient_card')) + '\n') time.sleep(2) browser.find_element_by_xpath(CpoeOutOrderElement.input[12]['key']).click() #获取测试用例 ers_cpoe_list = test_case #将多部位分装为集合 ers_combin_part_list = ers_cpoe_list[ Code.ers_cpoe_table['ers_combin_part']] ers_part = ers_cpoe_list[Code.ers_cpoe_table['ers_part']] ers_part_list = str(ers_part).split(',') #获取检查医嘱按钮区域 ers_cpoe_area = ErsCpoeElement.div[0]['key'] #检查项目录入区域 ers_item_area = ErsCpoeElement.div[1]['key'] #检查执行科室区域 ers_execute_area = ErsCpoeElement.div[2]['key'] #检查项目基本信息 ers_base_message_area = ErsCpoeElement.fieldset[0]['key'] #部位或方法组 ers_combin_part_area = ErsCpoeElement.fieldset[1]['key'] #部位或方法 ers_part_area = ErsCpoeElement.fieldset[2]['key'] #附加项目 ers_add_item_area = ErsCpoeElement.fieldset[3]['key'] #保存 ers_save = ErsCpoeElement.table[0]['key'] #执行科室列表 ers_execute_list = ErsCpoeElement.div[3]['key'] # ers_cpoe_button_element = browser.find_element_by_xpath(ers_cpoe_area).find_elements_by_tag_name('button') # ers_cpoe_button_element[3].click() # time.sleep(2) #点击检查按钮 js = 'document.getElementsByTagName("button")[10].click()' browser.execute_script(js) ers_cpoe_area_element = browser.find_element_by_xpath(ers_item_area) ers_cpoe_input_element = ers_cpoe_area_element.find_elements_by_tag_name( 'input') ers_cpoe_input_element[0].send_keys( ers_cpoe_list[Code.ers_cpoe_table['cpoe_name']] + '\n') time.sleep(1) ers_cpoe_name_elements = ers_cpoe_area_element.find_elements_by_tag_name( 'span') num = -1 for i in range(0, len(ers_cpoe_name_elements)): if ers_cpoe_list[Code.ers_cpoe_table[ 'cpoe_name']] == ers_cpoe_name_elements[i].text: num = i if num == -1: raise Exception('该项目不存在') else: on_click(browser, (By.XPATH, '//span[contains(text(),"%s")]' % ers_cpoe_list[Code.ers_cpoe_table['cpoe_name']])) time.sleep(1) ers_execute_element = browser.find_element_by_xpath( ers_execute_area).find_elements_by_tag_name('input') print(ers_execute_element[1].text) ers_execute_element[1].clear() ers_execute_element[1].send_keys( ers_cpoe_list[Code.ers_cpoe_table['execute_depat']]) time.sleep(1) ers_execute_element[1].send_keys(Keys.ENTER) # time.sleep(2) # execute_list_elements = browser.find_element_by_xpath(ers_execute_list).find_elements_by_tag_name('div') # bollen = True # for i in range(0,len(execute_list_elements)): # if ers_cpoe_list[Code.ers_cpoe_table['execute_depat']] == execute_list_elements[i].text: # execute_list_elements[i].click() # bollen = False # if i == len(execute_list_elements)-1: # if bollen:raise Exception('没有该执行科室,请配置流向!') count = 1 ers_combin_part_element = browser.find_element_by_xpath( ers_combin_part_area).find_elements_by_tag_name('div') time.sleep(2) for i in range(0, len(ers_combin_part_element)): if '无数据' == ers_combin_part_element[i].text: print('********') count = 0 browser.find_element_by_xpath( "//button[contains(text(),'保存并关闭')]").click() cache.set('pai_type', 'o') CpoeSubmit.test_cpoe_submit(browser, '检查单') return if count == 1: ers_combin_elements = browser.find_element_by_xpath( ers_combin_part_area).find_elements_by_tag_name('label') print(len(ers_combin_elements)) for i in range(0, len(ers_combin_elements)): if ers_combin_part_list == ers_combin_elements[i].text: ers_combin_elements[i].click() time.sleep(1) ers_part_elements = browser.find_element_by_xpath( ers_part_area).find_elements_by_tag_name('label') print(ers_part_list) for i in range(0, len(ers_part_elements)): for j in range(0, len(ers_part_list)): if ers_part_list[j] == ers_part_elements[i].text: ers_part_elements[i].click() cache.set('pai_type', 'o') button_element = browser.find_element_by_xpath( ers_save).find_elements_by_tag_name('button')[1] button_element.click() CpoeSubmit.test_cpoe_submit(browser, '检查单')
def test_apply_pharm(browser, cache): log.info('开始运行供药脚本') # 判断门诊挂号收费工作站是否打开 login.select_workstation(browser, '药房工作站', cache) if int(cache.get('resultType')) != 1: return # 获取申请单号及执行科室 application_list = list(cache.get('处方单').keys()) execute_list = list(set(list(cache.get('处方单').values()))) # 选取工作站 workstationElement = browser.find_element_by_xpath( PdsApplyPharmElement.button[0]['key']) workstationElement.click() time.sleep(1) workstationInputElement = browser.find_element_by_xpath( PdsApplyPharmElement.input[0]['key']) workstationInputElement.clear() time.sleep(1) if workstationInputElement.text == "": workstationInputElement.send_keys("光谷院区: " + execute_list[0]) else: workstationInputElement.clear() time.sleep(1) workstationInputElement.send_keys("光谷院区: " + execute_list[0]) time.sleep(1) workstationInputElement.send_keys(Keys.ENTER) on_click(browser, (By.XPATH, '//button[contains(text(),"确定")]')) browser.implicitly_wait(30) time.sleep(2) # 处方供药 reManageElement = browser.find_element_by_xpath( PdsApplyPharmElement.div[0]['key']) reManageElement.click() browser.find_element_by_link_text('处方供药').click() time.sleep(2) calendar_element = \ browser.find_element_by_xpath(PdsApplyPharmElement.fieldset[2]['key']).find_elements_by_tag_name('input')[3] js = "document.getElementsByTagName('fieldset')[0].getElementsByTagName('input')[3].removeAttribute('readonly')" browser.execute_script(js) calendar_element.clear() calendar_element.send_keys(time.strftime("%Y-%m-%d", time.localtime())) time.sleep(2) js = "document.getElementsByTagName('fieldset')[0].getElementsByTagName('input')[3].blur()" browser.execute_script(js) browser.find_element_by_xpath( PdsApplyPharmElement.fieldset[2]['key']).find_elements_by_tag_name( 'img')[1].click() browser.find_element_by_xpath("//button[contains(text(),'今天')]").send_keys( Keys.ENTER) cardElement = browser.find_element_by_xpath( PdsApplyPharmElement.input[1]['key']) cardElement.send_keys(cache.get('patient_card') + '\n') browser.implicitly_wait(30) receiveListElement = browser.find_element_by_xpath( PdsApplyPharmElement.div[3]['key']).find_elements_by_tag_name('tr') for i in range(0, len(receiveListElement)): applyElement = receiveListElement[i].find_elements_by_tag_name('div') for j in range(0, len(applyElement)): for appliction in application_list: if applyElement[j].text == appliction: applyElement[j].click() #获取处方药品信息 drug_detail = PdsApplyPharmElement.div[4]['key'] drug_detail_elements = browser.find_element_by_xpath( drug_detail).find_elements_by_tag_name('tr') verifys = [] pds_emr = cache.get('pds_emr') for i in range(0, len(drug_detail_elements)): pham = [] drug_elements = drug_detail_elements[i].find_elements_by_tag_name( 'div') for drug in drug_elements: pham.append(drug.text) verifys.append(pham) #验证药品库存数量 totals = [] #处方供药的药品总量的集合 pham_stocks = [] #药品库存集合 for verify in verifys: for i in range(0, len(pds_emr)): if pds_emr[i][cpoe_out_order['pham_name']] == verify[2]: pham_num = dao.find_pham_num(verify[2], verify[3], execute_list[0]) #药品库存数量 pham_basic_info = dao.find_pham_basic_info( verify[2], verify[3]) #药品基本信息 appy_pham_temp(pham_num, pham_basic_info, pds_emr[i]) #调用供药模板 total = math.ceil(pds_emr[i][cpoe_out_order['dosage']] / pham_basic_info.dose_per_unit * pham_basic_info.package_factor) #药品总量 totals.append(total) pham_stocks.append(pham_num[0]) else: log.info('未找到%s医嘱' % verify[2]) time.sleep(1) recSureElement = browser.find_element_by_xpath( PdsApplyPharmElement.button[2]['key']) recSureElement.click() on_click(browser, (By.XPATH, '//button[contains(text(),"是")]')) browser.implicitly_wait(30) time.sleep(2) listUrl = '处方单' Utility.microsoft_xps_document_writer(listUrl) browser.implicitly_wait(30) log.info('获取药品信息....') time.sleep(4) #验证 pham_stocks_after = [] #供药后,药品库存 for verify in verifys: for i in range(0, len(pds_emr)): if pds_emr[i][cpoe_out_order['pham_name']] == verify[2]: pham_num = dao.find_pham_num(verify[2], verify[3], execute_list[0]) pham_basic_info = dao.find_pham_basic_info( verify[2], verify[3]) appy_pham_temp(pham_num, pham_basic_info, pds_emr[i]) pham_stocks_after.append(pham_num[0]) else: log.info('未找到%s医嘱' % verify[2]) status = True for i in range(0, len(totals)): print(pham_stocks[i] - pham_stocks_after[i] == totals[i]) if not (pham_stocks[i] - pham_stocks_after[i] == totals[i]): status = False log.info('处方供药,药品库存数量验证fial') if status: log.info('处方供药,药品库存数量验证pass') #核对发药 receiveManagerElement = browser.find_element_by_xpath( PdsApplyPharmElement.div[0]['key']) receiveManagerElement.click() # sendMedElement=browser.find_element_by_xpath(PdsApplyPharmElement.a[6]['key']) # sendMedElement.click() browser.find_element_by_link_text('核对发药').click() sendCardElement = browser.find_element_by_xpath( PdsApplyPharmElement.fieldset[0]['key']).find_elements_by_tag_name( 'input')[1] sendCardElement.send_keys(str(cache.get('patient_card')) + '\n') end_time = time.time() + 3 while True: if '暂时没有您需要的数据...' not in get_text( browser, (By.XPATH, PdsApplyPharmElement.div[5]['key'])): break if time.time() > end_time: log.info('核对发药页面加载超时或没有找到发药单') return # browser.find_element_by_xpath(PdsApplyPharmElement.fieldset[0]['key']).find_elements_by_tag_name('button')[0].click() browser.find_element_by_xpath("//button[contains(text(),'发药(O)')]").click() browser.find_element_by_xpath("//button[contains(text(),'是')]").click() log.info('供药脚本运行结束')
def test_reservation_regist(browser,cache): #判断检查预约工作站是否打开 login.select_workstation(browser, '检查预约', cache) work_select.select_department(browser,cache) browser.find_element_by_xpath(reservation.div[0]['key']).click() browser.find_element_by_link_text('预约登记管理').click() time.sleep(2) apply_list = list(cache['检查单'].keys()) #选取预约类型(门诊o 住院i) reservation_type = reservation.div[1]['key'] #刷卡 swip_card = reservation.div[2]['key'] #是否预约按钮区域 res_button = reservation.div[3]['key'] #申请单列表区域 application_list = reservation.div[4]['key'] #患者列表区域 pai_detail = reservation.div[5]['key'] #申请单明细区域 application_detail = reservation.div[6]['key'] # 预约日期区域 calendar_xpath = reservation.div[7]['key'] #预约资源明细区域 res_resource_detail = reservation.div[8]['key'] #提示框 prompt = reservation.div[9]['key'] #确认预约框 sure_res = reservation.div[10]['key'] # reservation_type_elements = browser.find_element_by_xpath(reservation_type).find_elements_by_tag_name('button') if cache['pai_type'] == 'o': browser.find_element_by_link_text('门诊预约').click() elif cache['pai_type'] == 'i': browser.find_element_by_link_text('住院预约').click() swip_card_element = browser.find_element_by_xpath(swip_card).find_elements_by_tag_name('input') swip_card_element[0].send_keys(str(cache['userId'])+'\n') time.sleep(2) #选取申请单 for apply in apply_list: browser.find_element_by_xpath("//div[contains(text(),'"+apply+"')]").click() application_list_elements = browser.find_element_by_xpath(application_list).find_elements_by_tag_name('div') #预约当前时间最近的且预约人数<可预约人数 #当前时间 date = time.strftime("%Y-%m-%d", time.localtime()) remove_js = "document.getElementsByTagName('input')[16].removeAttribute('readonly')" focus_js = "document.getElementsByTagName('input')[16].blur()" input_locator = (By.XPATH,calendar_xpath+'//input[1]') img_locator = (By.XPATH,calendar_xpath+'//img[1]') common.calendar(browser,remove_js,focus_js,input_locator,img_locator,date) time.sleep(2) now = time.strftime("%Y-%m-%d %H:%M", time.localtime()) table_elements = browser.find_element_by_xpath(res_resource_detail).find_elements_by_tag_name('table') for table_element in table_elements: div_elements = table_element.find_elements_by_tag_name('div') if div_elements[3].text>now: print(div_elements[5].text) if div_elements[4].text>div_elements[5].text: div_elements[4].click() break browser.find_element_by_xpath("//button[contains(text(),'预约并确认')]").click() browser.find_element_by_xpath("//button[contains(text(),'是')]").click() # browser.find_element_by_xpath("//button[text()='确认')]").click() locator = (By.XPATH,"//button[text()='确认']") on_click(browser,locator) time.sleep(4) url = "检查预约单" utility.microsoft_xps_document_writer(url)
buttons = browser.find_elements_by_tag_name('button') for button in buttons: if '【'in button.text : button.click() browser.find_element_by_xpath(plat.input[0]['key']).clear() # browser.find_element_by_xpath(plat.input[0]['key']).send_keys('光谷院区: '+depart_list[1]) browser.find_element_by_xpath(plat.input[0]['key']).send_keys('光谷院区: 预约小组' ) time.sleep(1) browser.find_element_by_xpath(plat.input[0]['key']).send_keys(Keys.ENTER) browser.find_element_by_xpath(plat.button[0]['key']).click() if __name__ == '__main__': browser = common.browser() login.test_login(browser,testcase={'用户名':'jfli','密码':'123456'},cache={}) login.select_workstation(browser, '检查预约', cache={}) select_department(browser,cache={'depart':'预约小组'}) time.sleep(2) swip_card = reservation.div[2]['key'] swip_card_element = browser.find_element_by_xpath(swip_card).find_elements_by_tag_name('input') swip_card_element[0].send_keys('%E?;1004627675=99015017425?+E?' + '\n') time.sleep(2) browser.find_element_by_xpath("//div[contains(text(),'02D2017041400002')]").click() element = browser.find_element_by_xpath('/html/body/div[1]/div/div[2]/div[1]/div[2]/div[1]/div/div/div[2]/div[1]/div[2]/div/div[3]/div/div[2]/div[1]/div').find_elements_by_tag_name('input')[0] print(element.get_attribute('value')) js = "document.getElementsByTagName('input')[16].removeAttribute('readonly')" browser.execute_script(js) element.clear()
def test_pharm_return(browser, cache): applications = list(cache['处方单'].keys()) # 判断门诊挂号收费工作站是否打开 login.select_workstation(browser, '药房工作站', cache) on_click(browser, (By.XPATH, '//div[contains(text(),"收方管理")]')) on_click(browser, (By.LINK_TEXT, "处方供药")) on_click(browser, (By.XPATH, '//div[contains(text(),"收方管理")]')) on_click(browser, (By.LINK_TEXT, "核对发药")) #进入处方退药界面 browser.find_element_by_xpath(pharm_return.div[0]['key']).click() browser.find_element_by_link_text('处方退药').click() #退药信息区域 drug_return_message = pharm_return.div[1]['key'] #患者信息区域 patient_message = pharm_return.div[2]['key'] #申请单列表区域 application_list = pharm_return.div[3]['key'] #退药明细区域 drug_return_detail = pharm_return.div[4]['key'] calendar_element = browser.find_element_by_xpath( drug_return_message).find_elements_by_tag_name('input')[3] js = "document.getElementsByTagName('fieldset')[4].getElementsByTagName('input')[3].removeAttribute('readonly')" browser.execute_script(js) calendar_element.clear() calendar_element.send_keys(time.strftime("%Y-%m-%d", time.localtime())) time.sleep(2) js = "document.getElementsByTagName('fieldset')[4].getElementsByTagName('input')[3].blur()" browser.execute_script(js) browser.find_element_by_xpath( drug_return_message).find_elements_by_tag_name('img')[1].click() browser.find_element_by_xpath("//button[contains(text(),'今天')]").send_keys( Keys.ENTER) swip_card_element = browser.find_element_by_xpath( drug_return_message).find_elements_by_tag_name('input')[0] swip_card_element.clear() swip_card_element.send_keys(str(cache['patient_card']) + '\n') patient_message_elements = browser.find_element_by_xpath( patient_message).find_elements_by_tag_name('input') label_elements = browser.find_element_by_xpath( patient_message).find_elements_by_tag_name('label') patient_dict = {} for i in range(0, len(patient_message_elements)): patient_dict[label_elements[i].text] = patient_message_elements[i].text ''' 数据验证 ''' application_list_elements = browser.find_element_by_xpath( application_list).find_elements_by_tag_name('tr') for i in range(0, len(application_list_elements)): applyElement = application_list_elements[i].find_elements_by_tag_name( 'div') for j in range(0, len(applyElement)): for appliction in applications: if applyElement[j].text == appliction: applyElement[j].click() drug_return_detail_elements = browser.find_element_by_xpath( drug_return_detail).find_elements_by_tag_name('tr') for drug_detail in drug_return_detail_elements: # drug_return_num = drug_detail.find_elements_by_tag_name('span')[1].text # print(drug_return_num) # number = random.randint(1,drug_return_num) # drug_detail.find_elements_by_tag_name('div')[7].send_keys(number) drug_return_num = int( re.sub('[\u4e00-\u9fa5]', '', (drug_detail.find_elements_by_tag_name('span')[1].text))) number = random.randint(1, drug_return_num) drug_detail.find_elements_by_tag_name('div')[6].click() time.sleep(1) browser.find_element_by_xpath( '/html/body/div[1]/div/div[2]/div[1]/div[2]/div[1]/div[4]/div/div[2]/div[1]/div[2]/div[2]/div[1]/div/div[1]/div[1]/div[2]/div[2]/div/input' ).send_keys(number) # js = 'document.getElementsByClassName(" x-form-field x-form-text xh-highlight x-form-focus")[0].innerHTML=1' # browser.execute_script(js) browser.find_element_by_xpath("//button[contains(text(),'退药(O)')]").click() time.sleep(1) browser.find_elements_by_xpath( "//button[contains(text(),'确认(O)')]")[1].click() microsoft_xps_document_writer('退药单') cache.set('apply_date', time.strftime("%Y-%m-%d", time.localtime())) cache.set('apply_card', applications) browser.refresh()
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_get_hospital_card(browser, userList, cache): #参数化数据 dict = TestCaseCodeTable.get_hospital_card #切换到工作站 login.select_workstation(browser, '门诊挂号收费工作台', cache) # switchWindow(browser, '门诊挂号收费工作台') #点击菜单进入就诊卡办理页面 e = browser.find_element_by_xpath("//div[contains(text(), '门诊挂号')]") e.click() time.sleep(2) browser.find_element_by_xpath("//a[contains(text(), '就诊卡办理')]").click() #就诊卡办理页面,填写信息 #F2刷卡 # e = browser.find_element_by_xpath("/html/body/div[1]/div/div[2]/div[1]/div[2]/div[1]/div[2]/div/div[2]/div[1]/div[1]/table/tbody/tr[1]/td/div/div[2]/div[1]/div/div[2]/div[1]/form/div/div/div[1]/div/div[1]/div/input") e = browser.find_element_by_xpath(hospital_card.input[0]["key"]) # e.send_keys("%E?;2501218839=99015016158?+E?" + "\n") print(cache.get('patient_card')) e.send_keys(str(cache.get('patient_card')) + "\n") time.sleep(2) try: if browser.find_element_by_xpath("//font[contains(text(), '新卡')]"): #填写姓名 # e1 = browser.find_element_by_xpath("/html/body/div[1]/div/div[2]/div[1]/div[2]/div[1]/div[2]/div/div[2]/div[1]/div[1]/table/tbody/tr[1]/td/div/div[2]/div[1]/div/div[2]/div[1]/form/fieldset/div/div[1]/div/div[1]/div[1]/div[1]/div/input") e1 = browser.find_element_by_xpath(hospital_card.input[1]["key"]) # e1.send_keys(r"田伟511") e1.send_keys(userList[dict['patient_name']]) #选择性别 # browser.find_element_by_xpath("/html/body/div[1]/div/div[2]/div[1]/div[2]/div[1]/div[2]/div/div[2]/div[1]/div[1]/table/tbody/tr[1]/td/div/div[2]/div[1]/div/div[2]/div[1]/form/fieldset/div/div[1]/div/div[3]/div[1]/div[1]/div/input").click() browser.find_element_by_xpath( hospital_card.input[2]["key"]).click() browser.find_element_by_xpath( "//div[contains(text(), '男')]").click() #选择出生年月 # e2 = browser.find_element_by_xpath("/html/body/div[1]/div/div[2]/div[1]/div[2]/div[1]/div[2]/div/div[2]/div[1]/div[1]/table/tbody/tr[1]/td/div/div[2]/div[1]/div/div[2]/div[1]/form/fieldset/div/div[1]/div/div[4]/div[1]/div/div[1]/div/div[1]/div/input") e2 = browser.find_element_by_xpath(hospital_card.input[3]["key"]) # e2.send_keys("19840203") e2.send_keys(userList[dict['birthday']]) #输入电话1和确认电话1 # e3 = browser.find_element_by_xpath("/html/body/div[1]/div/div[2]/div[1]/div[2]/div[1]/div[2]/div/div[2]/div[1]/div[1]/table/tbody/tr[1]/td/div/div[2]/div[1]/div/div[2]/div[1]/form/fieldset/div/div[1]/div/div[1]/div[2]/div[1]/div/input") e3 = browser.find_element_by_xpath(hospital_card.input[4]["key"]) # e3.send_keys("15207145415") e3.send_keys(userList[dict['phone']]) # e4 = browser.find_element_by_xpath("/html/body/div[1]/div/div[2]/div[1]/div[2]/div[1]/div[2]/div/div[2]/div[1]/div[1]/table/tbody/tr[1]/td/div/div[2]/div[1]/div/div[2]/div[1]/form/fieldset/div/div[1]/div/div[2]/div[2]/div[1]/div/input") e4 = browser.find_element_by_xpath(hospital_card.input[5]["key"]) # e4.send_keys("15207145415") e4.send_keys(userList[dict['phone1']]) print("电话ok") #费别 # e5 = browser.find_element_by_xpath("/html/body/div[1]/div/div[2]/div[1]/div[2]/div[1]/div[2]/div/div[2]/div[1]/div[1]/table/tbody/tr[2]/td/div/div[2]/div[1]/div/div[2]/div[1]/form/fieldset[2]/div/div/div/div[1]/div/div[1]/div/input") e5 = browser.find_element_by_xpath(hospital_card.input[6]["key"]) e5.click() # browser.find_element_by_xpath("//div[contains(text(), '自费')]").click() t = userList[dict['charge_type']] browser.find_element_by_xpath("//div[contains(text(), t)]").click() print(userList[dict['charge_type']]) print("费别ok") #保存 time.sleep(2) browser.find_element_by_xpath( "//button[contains(text(), '保存')]").click() time.sleep(2) print("新卡办理ok") except: if browser.find_element_by_xpath("//font[contains(text(), '正常')]"): browser.find_element_by_xpath( "//button[contains(text(), '修改')]").click() else: browser.find_element_by_xpath("//font[contains(text(), '新卡')]") browser.find_element_by_xpath( "//button[contains(text(), '保存')]").click() print("修改点击ok") # browser.find_element_by_xpath("//span[contains(text(), '就诊卡办理')]//parent::span//parent::em//parent::a//parent::li//child::a").click() browser.refresh() time.sleep(2) print("退出ok")