def is_login_success(self): ''' Assert function: judge is it success! Collect useful data ''' try: self.sleep(1) account = self.login_account IsSuccess = "success" ReturnCode = 0 result = True format_logger = ' ' * 43 error_info = None logger.info("{3}!\n{0}- 测试账户:{1}\n{2}".format( format_logger, account, format_logger, IsSuccess)) print("Test success!") print("Test Account:{}".format(account)) except Exception as e: error_info = self.save_screen_shot() # 错误时保存截图:图片名称 logger.error("Test Fail!Reason:{}".format(str(e))) ReturnCode = 1 IsSuccess = "Fail" result = False print("Test fail!") print("Error Reason:{}".format(e)) finally: payload = { "result": result, "data": { "ReturnCode": ReturnCode, "IsSuccess": IsSuccess }, "Exception": error_info } return payload
def __init__(self, ip, password=None, port=6379, db=0): #构造函数 try: self.r = redis.Redis(host=ip, password=password, port=port, db=db) # r = redis.ConnectionPool(host=ip,password=password,port=port,db=db) except Exception as e: logger.error('redis连接失败,错误信息%s' % e)
def test_injection_page(self): '''注资页面跳转''' test_action = get_func_name() try: JPage = InjectionPage(self.driver) # 网上存款页面类 JPage.click_injection_button JPage.into_bank_page n = JPage.get_payway_number bank_detail = JPage.get_payway_detail1 assert n result = self.result[0] ReturnCode = 0 print("Test Success!\n ") print("当前可用支付通道数目:{}\n".format(n)) print("通道明细:{}".format(bank_detail)) except Exception as e: print(str(e)) result = self.result[1] ReturnCode = 1 logger.error("Test Fail! Reason:{}".format(e)) finally: data = {test_action: {"result": result, "ReturnCode": ReturnCode}} self.data["suite"].update(data)
def find_element(self, locator): try: element = self.wait.until(EC.presence_of_element_located(locator)) logger.info("Had find the element {}".format(element.text)) return element except NoSuchElementException as e: logger.error("NoSuchElementException: %s" % e)
def exchange_to_window(self, handle): try: self.driver.switch_to.window(handle) logger.info("Has change to {} window page!".format(handle)) except Exception: logger.error( "Current number of windows is only one,unable to exchange!")
def click(self, locator): el = self.find_element(locator) try: el.click() logger.info("The element \' %s \' was clicked.") except NameError as e: logger.error("Failed to click the element with %s" % e)
def test_payment_channel2(self): '''支付通道2测试''' test_action = get_func_name() money = Config().get("money") try: CS = ChannelSelect(self.driver).select DPage2 = CS(self.driver) PaywayName = DPage2.get_payway_name(cn=0) Banklist, Bank_dic, Test_bank = DPage2.get_bank_detail DPage2.sumbit(money) bank_handle = DPage2.exchange_bank_page DPage2.close_bank_page(bank_handle) DPage2.return_payment_page assert bank_handle print("Test Success! ") print("Test PayWay:{}".format(PaywayName)) print("Test BankName:{}".format(Test_bank)) print("Available banks:{}".format(Banklist)) print(Bank_dic) result = self.result[0] ReturnCode = 0 logger.info("第三方支付跳转成功") except Exception as e: result = self.result[1] ReturnCode = 1 logger.error("Test Fail! Reason:{}".format(e)) finally: time.sleep(1) data = {test_action: {"result": result, "ReturnCode": ReturnCode}} self.data["suite"].update(data)
def test_payment_channel1(self): '''支付通道1跳转''' money = Config().get("money") test_action = get_func_name() try: CS = ChannelSelect(self.driver).select DPage = CS(self.driver) PaywayName = DPage.get_payway_name(cn=1) # 选择第一个支付通道,获取 DPage.sumbit(money) # 提交 bank_handle = DPage.exchange_bank_page element = DPage.is_element_exist DPage.close_bank_page(bank_handle) DPage.return_payment_page assert element print("Test Success! ") print("Test PayWay:{}".format(PaywayName)) result = self.result[0] ReturnCode = 0 logger.info("第三方支付跳转成功") except Exception as e: print(str(e)) result = self.result[1] ReturnCode = 1 logger.error("Test Fail! Reason:{}".format(e)) finally: time.sleep(1) data = {test_action: {"result": result, "ReturnCode": ReturnCode}} self.data["suite"].update(data)
def query(self, sql, params=None, datasize=1): self.datasize = datasize """ 参数sql:包含%s的sql字符串,当params=None的时候,不包含%s 参数params:一个元祖,默认为None 参数datasize:0-返回所有结果 1-每次返回一条结果 n-每次返回n条结果 """ try: # 执行SQL语句 self.cur.execute(sql, params) # 获取数据的行数 row = self.cur.rowcount # 获取查询数据 """ cursor.fetchone():将只取最上面的第一条结果,返回单个元组如('id','title'),然后多次使用cursor.fetchone(),依次取得下一条结果,直到为空。 cursor.fetchall() :将返回所有结果,返回二维元组,如(('id','title'),('id','title')) cursor.fetchmany(n):每次抓取n条记录,该方法返回一个由n条记录组成的列表 """ if self.datasize == 1: dataList = self.cur.fetchone() elif self.datasize == 0: dataList = self.cur.fetchall() else: dataList = self.cur.fetchmany(self.datasize) except: logger.error("Error: unable to fetch data") return dataList, row
def clear(self, locator): el = self.find_element(locator) try: el.clear() logger.info("Clear text in input box before typing.") except NameError as e: logger.error("Failed to clear in input box with %s" % e) self.get_windows_img()
def get_el_text(self, locator): el = self.find_element(locator) try: return el.text logger.info("The element \' %s \' was clicked." % el.text) except Exception as e: logger.error("Failed to get the text of the element .Reason: %s" % e)
def select_payway(self, cn): '''pay way name method''' try: self.payways_elements[cn].click() # 选择支付通道一 payway = self.payways_elements[cn].text # 获取支付通道名字 return payway except Exception: logger.error("Payway does not exist")
def find_elements(self, locator): try: elements = self.wait.until( EC.presence_of_all_elements_located(locator)) logger.info("Had find the element {}".format(len(elements))) return elements except NoSuchElementException as e: logger.error("NoSuchElementException: %s" % e)
def close_bank_page(self, bank_handle): '''close bank page,return to payment page''' try: self.close # 关闭第三方支付页面 self.exchange_to_window(bank_handle) # 返回支付页面 logger.info("return to payment page!") except Exception as e: pass logger.error("Error !Reason:{}".format(e))
def input_money(self, money): '''提交操作''' try: self.clear(self.loc_input_money) self.type(money, self.loc_input_money) logger.info("input inject money:{}...".format(money)) except Exception: logger.error("提交跳转出错")
def type(self, text, locator): el = self.find_element(locator) el.clear() try: el.send_keys(text) logger.info("Had type \' %s \' in inputBox" % text) except NameError as e: logger.error("Failed to type in input box with %s" % e) self.get_windows_img()
def close_driver(driver): """ Recebe driver por parametro e desliga-lo """ try: logger.info("Fechando driver") driver.close() except Exception as error: logger.critical("Erro ao desligar driver") logger.error(error)
def exchange_bank_page(self): '''turn to bank payment page''' try: handles = self.collect_handles current_handle = self.current_window for handle in handles: if handle != current_handle: self.exchange_to_window(handle) # 切换到到第三方支付页面 logger.info( 'switch bank page!Page handle: {}'.format(handle)) return current_handle except Exception as e: logger.error("{}".format(e))
def write_ipt_by_id(id=None, text=None): """ Recebe "id" por parametro e o texto a ser escrito no campo. Escreve o "text" em um input com "id" recebido por parametro. """ try: if id is None or text is None: logger.critical("id ou text não informado") else: logger.debug("Escrevendo no campo by id: {}".format(id)) time.sleep(1) driver.find_element_by_id(id).send_keys(text) except Exception as error: logger.error("Erro ao Escrevendo no campo by xpath: {}".format(id)) logger.error(error)
def click_btn_by_class(id_class=None): """ Recebe "classe" por parametro. Clica em um botão com "class" recebida por parametro. """ try: if id_class is None: logger.critical("id_class não informado") else: logger.debug("Clicando no botão by classe: {}".format(id_class)) time.sleep(1) driver.find_element_by_class_name(id_class).click() except Exception as error: logger.error("Erro ao clicar no botão by classe: {}".format(id_class)) logger.error(error)
def click_btn_by_id(id=None): """ Recebe "id" por parametro. Clica em um botão com "id" recebido por parametro. """ try: if id is None: logger.critical("id não informado") else: logger.debug("Clicando no botao by id: {}".format(id)) time.sleep(1) driver.find_element_by_id(id).click() except Exception as error: logger.error("Erro ao clicar no botão by id: {}".format(id)) logger.error(error)
def return_element_by_id(id=None): """ Retorna um elemento a partir do "id" recebido """ try: if id is None: logger.critical("id não informado") return else: logger.info("Retornando elemento by id") return driver.find_element_by_id(id) except Exception as error: logger.error("Erro ao retornar arquivo by id") logger.error(error)
def save_screen_shot(self, name='XSTZ_WAP'): day = time.strftime('%Y%m%d', time.localtime(time.time())) screenshot_path = REPORT_PATH + '\screenshot_%s' % day if not os.path.exists(screenshot_path): os.makedirs(screenshot_path) rt = time.strftime('%H%M%S', time.localtime(time.time())) try: screenshot = self.driver.save_screenshot( screenshot_path + '\\%s_%s.png' % (name, rt)) # 截图命名及保存位置 return screenshot except NameError as e: logger.error("Failed to take screenshot! %s" % e) self.get_windows_img()
def login(): """ Responsavel por realizar login na app """ try: init() logger.debug("Music: Realizando login") fw.click_btn_by_xpath(INITIAL_BT_XPATH) fw.write_ipt_by_xpath(LG_USERNAME_IPT_XPATH, USERNAME) fw.click_btn_by_id(LG_USERNAME_BTN_ID) fw.write_ipt_by_xpath(LG_PASSWORD_IPT_XPATH, PASSWORD) fw.click_btn_by_id(LG_PASSWORD_BTN_ID) except Exception as error: logger.error("Music - Erro ao realizar login") logger.error(error)
def click_btn_by_xpath(xpath=None): """ Recebe "xpath" por parametro. Clica em um botão com "xpath" recebido por parametro. """ try: if xpath is None: logger.critical("id não informado") else: logger.debug("Clicando no botão by xpath: {}".format(xpath)) time.sleep(1) driver.find_element_by_xpath(xpath).click() except Exception as error: print(error) logger.error("Erro ao clicar no botão by xpath: {}".format(xpath)) logger.error(error)
def write_ipt_by_xpath(xpath=None, text=None): """ Recebe "xpath" por parametro e o "texto" a ser escrito no campo. Escreve o "text" em um input com "xpath" recebido por parametro. """ try: if xpath is None or text is None: logger.critical("Xpath ou text não informado") return else: logger.debug("Escrevendo no campo by id: {}".format(xpath)) time.sleep(1) driver.find_element_by_xpath(xpath).send_keys(text) except Exception as error: logger.error("Erro ao Escrevendo no campo by xpath: {}".format(xpath)) logger.error(error)
def start(): print('#---------------PROCESSO INICIADO----------------#') logger.info('#---------------PROCESSO INICIADO----------------#') try: music.login() discord.login() var = 1 except Exception as error: logger.critical("Processo finalizado com ERRO") logger.error(error) logger.info('#---------------PROCESSO FINALIZADO----------------#') print('#---------------PROCESSO FINALIZADO----------------#') sys.exit(1) logger.info('#---------------PROCESSO FINALIZADO----------------#') print('#---------------PROCESSO FINALIZADO----------------#') sys.exit(0)
def save_screen_shot(self, name='XSTZ_WAP'): day = time.strftime('%Y%m%d', time.localtime(time.time())) png_path = REPORT_PATH + '\screenshot_%s' % day if not os.path.exists(png_path): os.makedirs(png_path) rt = time.strftime('%H%M%S', time.localtime(time.time())) try: img_name = '\\%s_%s.png' % (name, rt) self.driver.get_screenshot_as_file( '%s%s' % (png_path, img_name)) # 截图命名及保存位置 return img_name except NameError as e: logger.error("Failed to take screenshot! %s" % e) self.save_screen_shot()
def is_deposit_success(self, locator, element): ''' Return: Payload , is the source data for send Email,Dingding Robot, insert Influxdb ''' try: self.submit # 判断是否可以正常进行提交 except Exception: error_info = self.save_screen_shot() # 错误时保存截图:图片名称 ReturnCode = 1 IsSuccess = "Fail" result = False self.back() # 返回上一页面 else: # 如果可以正常提交,进入第三支付页面,异常判断 try: bank_handle = self.exchange_bank_page # 跳转第三方网银支付页面操作 self.find_element((locator, element)) IsSuccess = "success" ReturnCode = 0 result = True error_info = None print("Test Success!\n ") logger.info("第三方支付跳转成功") except Exception: error_info = self.save_screen_shot() # 错误时保存截图:图片名称 ReturnCode = 1 IsSuccess = "Fail" result = False print("Test fail!") logger.error("支付页面崩溃或超时!") finally: self.close_bank_page(bank_handle) self.return_payment_page finally: payload = { "result": result, "data": { "ReturnCode": ReturnCode, "IsSuccess": IsSuccess, }, "Exception": error_info } return payload
def get_x_request_id(is_logger_call=False): """ @summary: 获取APP请求头唯一标识 x-request-id """ try: x_request_id = '' http_request = get_request() if hasattr(http_request, 'META'): meta = http_request.META x_request_id = meta.get('HTTP_X_REQUEST_ID', '') if isinstance( meta, dict) else '' except Exception as e: # 如果是logger函数调用则不可将异常写入日志,否则可能会引起死循环 # 非logger调用此函数的可以使用logger if not is_logger_call: logger.error(u"get_x_request_id: %s" % e) x_request_id = '' return x_request_id