def outp_regist_master(test_case): dict = table.patient_visit_card reg_date = datetime.date.today() reg_type_refer = {'普通': '1', '急诊': '2', '专家': '3', '特需': '4', '节假日': '5', '残疾': '6', '老年': '7', '保健': '8', '义诊': '9', '简易': '10'} outp_duration_refer = {'全天': '1', '上午': '2', '下午': '3', '晚上': '4'} Master = RegMaster.OutpRegMaster Clinic = SpecialClinic.OutpSpecialClinic session = Utility.db_session(path.PTS_DB_HOST) str = session.query(Master,Clinic).filter(Master.belong_dept_code == Clinic.belong_clinic_code).\ filter(Master.outp_date == reg_date,Master.hospital_area_code == path.HOSPITA_AREA_CODE,Clinic.special_clinic_name == test_case[dict['special_name']]).\ filter( Master.outp_type_code == reg_type_refer[test_case[dict['special_type']]],Master.outp_duration_code == outp_duration_refer[test_case[dict['outp_time']]]) if test_case[dict['doctor_name']].strip() == '': if str.all() == []: return None else: result = str.first() else: session_user = Utility.db_session(path.UUM_DB_HOST) UUM = User.User user = session_user.query(UUM).filter(UUM.people_name == test_case[dict['doctor_name']]).one() sql = str.filter(Master.emp_no == user.user_name) if sql.all() == []: return None result = sql.first() session_user.close() session.close() return result
def test_login(browser, testcase, cache): log.info("开始运行登陆脚本") #判断该uum portal是否打开 if common.switch_window(browser, 'UUM Portal', cache): return #登录测试用例 browser.get(path.localhost) browser.implicitly_wait(20) # 判读用户是否已经登录 cookies = browser.get_cookies() for cookie in cookies: if 'CASTGC' in cookie.values(): browser.delete_all_cookies() browser.refresh() # browser.maximize_window() browser.find_element_by_xpath(portal.用户名).clear() browser.find_element_by_xpath(portal.用户名).send_keys( testcase[table.user_login['username']]) browser.find_element_by_xpath(portal.密码).clear() browser.find_element_by_xpath(portal.密码).send_keys( testcase[table.user_login['psw']]) browser.find_element_by_xpath(portal.登陆).send_keys(Keys.ENTER) time.sleep(2) if browser.title == 'UUM Portal': utility.writeFile('登录 pass') else: utility.writeFile('登录 fail') # browser.find_element_by_xpath(portal.input[2]['key']).click() # cache[browser.title] = browser.current_window_handle cache.set(browser.title, browser.current_window_handle) log.info("登陆脚本运行结束")
def outp_patient_visit(test_case): dict = table.patient_visit_card reg_date = datetime.date.today() reg_type_refer = {'普通': '1', '急诊': '2', '专家': '3', '特需': '4', '节假日': '5', '残疾': '6', '老年': '7', '保健': '8', '义诊': '9', '简易': '10'} outp_duration_refer = {'全天': '1', '上午': '2', '下午': '3', '晚上': '4'} Vist = PatientVist.OutPatientVisit session_visit = Utility.db_session(path.PTS_DB_HOST) str = session_visit.query(func.count(Vist.outp_visit_id)).filter(Vist.registering_time>reg_date,Vist.outp_special_name == test_case[dict['special_name']], Vist.outp_duration_code == outp_duration_refer[test_case[dict['outp_time']]], Vist.outp_type_code == reg_type_refer[test_case[dict['special_type']]], Vist.hospital_area_code == path.HOSPITA_AREA_CODE, Vist.registry_flag != 2) if test_case[dict['doctor_name']].strip() == '': result = str.one() else: session_user = Utility.db_session(path.UUM_DB_HOST) UUM = User.User user = session_user.query(UUM).filter(UUM.people_name == test_case[dict['doctor_name']]).one() sql = str.filter(Vist.emp_no == user.user_name) if sql.all() == []: return None result = sql.one() session_user.close() session_visit.close() return result
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 callmoudle(browser,cachedata,List_action,test_case): try: # key,value相互转换 dictionary = {value: key for key, value in work.action_to_testcase1.items()} for workstation in List_action: if not isinstance(workstation,list): continue moudel_list = work.workstation_include_moudle[workstation[0]] for moudel in moudel_list: action = __import__(moudel.split('.')[-1]) method_name = 'test_' + dictionary.get(workstation[1]) if hasattr(action,method_name): fun = getattr(action,method_name) if test_case[workstation[1]] is None: fun(browser,cachedata) else: if int(workstation[4]) == 0: #执行次数如果为0,跳过改脚本 break # 执行次数大于用例数据,执行用例所有数据 if int(workstation[4])>len(test_case[workstation[1]]): workstation[4] = test_case[workstation[1]] for i in range(int(workstation[4])): if workstation[3].strip() == '随机': num = random.randint(0,int(workstation[4])-1) if workstation[3].strip() == '顺序': num = i fun(browser,test_case[workstation[1]][num],cachedata) except Exception as e: # utility.SaveLog(e, 1) log.exception(e) utility.capture(browser,'fail')
def test_cpoe_submit(browser,bill_name): time.sleep(1) submitElement = browser.find_element_by_xpath(CpoeOutOrderElement.button[4]['key']) submitElement.click() time.sleep(3) Utility.microsoft_xps_document_writer(bill_name) listUrl = '医嘱' Utility.microsoft_xps_document_writer(listUrl)
def appy_pham_temp(pham_num, pham_basic_info, pds_emr): if (pham_num and pham_basic_info) != None: total = math.ceil(pds_emr[cpoe_out_order['dosage']] / pham_basic_info.dose_per_unit * pham_basic_info.package_factor) #总量 counts = total * pham_basic_info.retail_price #总金额 Utility.writeFile( '药品名称:%s 药品规格:%s 总量:%s 总金额:%s 库存:%s' % (pham_basic_info.pham_name, pham_basic_info.pham_spec, total, counts, str(pham_num[0]) + '.' + str(pham_num[1])))
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 find_mechanism_numbe(rek_no_list): BillItem = BmsBillItem.BillItem Rek = BmsRek.Rek session = Utility.db_session(path.BMS_DB_HOST) sql = session.query(BillItem.branch_no).filter(BillItem.rek_id.in_(session.query(Rek.id).filter(Rek.rek_no.in_(rek_no_list)))).group_by(BillItem.branch_no) if sql.all != []: return sql.one() else: return None
def BuildTestCase(test_case,List_action): for action in List_action: if not isinstance(action,list): continue if not action[1] in test_case.keys(): if action[2] == '/': test_case[action[1]] = None else: sheet_name = work.action_to_testcase1.get(action[2]) test_case[action[1]] = utility.GetTestcase(List_action[-1].get('path'),sheet_name)
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 outp_balance(test_case): dict = table.patient_visit_card card = re.sub('[^0-9]', '', test_case[dict['patient_card']].split('=')[0]) session = Utility.db_session(path.PCA_DB_HOST) Index = index.PcaPrepayAccountIndex Master = master.PcaPrepayAccountMaster sql = session.query(Index, Master).filter(Index.account_index == Master.account_index,Index.card_no == card,Master.account_type == 'O') if sql.all() == []: return None result = sql.one() session.close() return result
def find_min_ticket(username,ticket_name): dept_org_codes = str(path.HOSPITA_CODE)+'%' TicketDept = IsmsTicketDept.TicketDept TicketDictionary = IsmsTicketDictionary.TicketDictionary TicketStock = IsmsTicketStock.TicketStock session = Utility.db_session(path.ISMS_DB_HOST) sql = session.query(func.min(TicketStock.ticket_start_number)).filter(TicketStock.ticket_dept_code == TicketDept.ticket_dept_code, TicketStock.ticket_dictionary_code == TicketDictionary.ticket_dictionary_code, TicketDept.ticket_dept_name.like('%'+username),TicketDictionary.ticket_name == ticket_name, TicketDept.ticket_dept_org_code.like(dept_org_codes)) print(sql) result = sql.one() return result
def find_rek_no(apply_id): BillItem = BmsBillItem.BillItem Rek = BmsRek.Rek session = Utility.db_session(path.BMS_DB_HOST) settle_type_list = ['0','1','2'] for settle_type in settle_type_list: str = session.query(Rek,BillItem).filter(Rek.id == BillItem.rek_id).filter(Rek.area == path.HOSPITA_AREA_CODE,Rek.settle_type == settle_type ,BillItem.apply_id == apply_id,Rek.in_out_flag == 'O') if settle_type == '0': result = str.first() elif settle_type != '0' and str.all()!=[]: result = [] return result
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)
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('挂号留号运行结束')
#! /usr/bin/env python #coding=utf-8 ''' 测试用例绝对路径 ''' import UI.common_th_supcom_config.url_config as path import UI.com_th_supcom_api.common.Utility as utility getUrl = { 'uum_portal': path.dir + '\\file\\uum_portal.xlsx', 'outp_bill_portal': path.dir + '\\file\\outp_bill_portal.xlsx', 'outp_doctor_portal': path.dir + '\\file\\outp_doctor_portal.xlsx', } if __name__ == "__main__": l = utility.GetTestcase(getUrl['outp_doctor_portal'], 'emr_pds') print(len(l))
def read_test_case(testcase_name): list = utility.GetTestcase(file.getUrl[testcase_name]) return list
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 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 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_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_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()