def find_element(self, element_info): """ 根据提供的元素参数信息进行元素查找 :param element_info:元素信息,自典类型{} :return: element对象 """ try: locator_type_name = element_info['locator_type'] locator_value_info = element_info['locator_value'] locator_timeout = element_info['timeout'] if locator_type_name == 'id': locator_type = By.ID elif locator_type_name == 'name': locator_type = By.NAME elif locator_type_name == 'link': locator_type = By.LINK_TEXT elif locator_type_name == 'class': locator_type = By.CLASS_NAME elif locator_type_name == 'xpath': locator_type = By.XPATH elif locator_type_name == 'css': locator_type = By.CSS_SELECTOR element=WebDriverWait(self.driver,locator_timeout).\ until(lambda x:x.find_element(locator_type,locator_value_info)) #最核心的代码 logger.info('[%s]元素识别成功' % element_info['element_name']) except Exception as e: logger.error('[%s]元素不识别成功,' % (element_info['element_name'])) self.screenshot_as_file() #元素识别识别,错误截图 # finally: # if element is None: # element = '' return element
def send(self, element_info, content): try: element = self.find_element(element_info) element.send_keys(content) logger.info('输入成功') except Exception as e: logger.error('输入失败')
def quit(self): try: time.sleep(3) self.driver.quit() logger.info('退出浏览器') except Exception as e: logger.error('退出浏览器失败,原因为%s' % e)
def click(self, element_info): try: element = self.find_element(element_info) element.click() logger.info('点击成功') except Exception as e: logger.error('点击失败')
def mouse_perform(self, element_info): try: element = self.find_element(element_info) ActionChains(self.driver).move_to_element(element).perform() logger.info("鼠标悬浮在%s" % element_info['element_name']) except Exception as e: logger.error('鼠标悬浮失败%s' % e)
def switch_to_frame_by_element(self, element_info): try: element = self.find_element(element_info) self.driver.switch_to.frame(element) logger.info('成功进入[%s]表单' % element_info['element_name']) except Exception as e: logger.error('进入表单失败,失败原因为%s' % e)
def scroll_bottom_page(self): try: self.driver.execute_script( "window.scrollTo(0,document.body.scrollHeight);") logger.info('滚动页面到底部') except Exception as e: logger.error('滚动页面到底部失败,原因为%s' % e)
def find_element(self, element_info): """ 根据提供的元素参数信息进行元素的查找 :param element_info: 元素信息参数,字典类型{} :return: element对象 """ try: locator_element_name = element_info['element_name'] locator_type_name = element_info['locator_type'] locator_value_info = element_info['locator_value'] locator_timeout = element_info['timeout'] if locator_type_name == 'id': locator_type = By.ID elif locator_type_name == 'name': locator_type = By.NAME elif locator_type_name == 'xpath': locator_type = By.XPATH elif locator_type_name == 'link_text': locator_type = By.LINK_TEXT elif locator_type_name == 'css_selector': locator_type = By.CSS_SELECTOR # element = WebDriverWait(self.driver, int(locator_timeout))\ # .until(lambda x: x.find_element(locator_type, locator_value_info)) # logger.info("%s元素识别成功" % locator_element_name) element = WebDriverWait(self.driver, float(locator_timeout))\ .until(EC.presence_of_element_located((locator_type_name, locator_value_info))) logger.info("%s元素识别成功" % locator_element_name) except Exception as e: logger.error("[%s]元素无法识别,原因是%s" % (element_info['element_name'], e.__str__())) self.screenshot_as_file() # finally: # if element is None: # element = '' return element
def get_title(self): try: title_text = self.driver.title logger.info('获取标题成功,标题为:%s' % title_text) return title_text except Exception as e: logger.error('获取标题失败,失败原因为:%s' % e)
def read_excel_data_into_mysql_database(excel_path): try: workbook = xlrd.open_workbook(excel_path) logger.info('创建workbook对象成功') except FileNotFoundError as e: current_path = os.path.dirname(__file__) excel_path = os.path.join(current_path, '../data/stu_info.xlsx') workbook = xlrd.open_workbook(excel_path) logger.error('excel文件未找到,使用默认路径文件:%s' % excel_path) sheet = workbook.sheet_by_index(0) cnx = mysql.connector.connect(user=config.get_mysql_user, password=config.get_mysql_password, host=config.get_mysql_host, database=config.get_mysql_database) for i in range(1, sheet.nrows): case_info = [] for j in range(sheet.ncols): if 'time' in str(sheet.cell_value(0, j)): # 处理日期为日期格式 case_info.append(xlrd.xldate.xldate_as_datetime(sheet.cell_value(i,j),0).strftime('%Y-%m-%d %H:%M:%S')) elif 'int' in str(sheet.cell_value(0, j)): # 处理期数、工号、推广组、城市为整形 case_info.append(int(sheet.cell_value(i ,j))) elif 'null' in str(sheet.cell_value(0, j)): case_info.append('NULL') else: case_info.append(sheet.cell_value(i, j)) cursor = cnx.cursor() sql = "insert into joycloud_f_dt_platform_data_lines" \ "( uid, ord_no, fst_int_dte, stg_typ, bsy_typ, emp_no, emp_nam, tem_id, tem_nam, cty_id, cty_nam, fst_ord, cus_nam, rpt_cus_nam, lft_prc_amt, min_ovd_dte, max_ovd_stt, ovd_fst_stg_no)" \ " values('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')"%tuple(case_info) print(sql) cursor.execute(sql) cnx.commit() cursor.close() cnx.close()
def find_element(self, element_info): """ 根据提供的元素参数信息进行元素查找 :param element_info:元素信息,字典类型{....} :return: element对象 """ try: locator_type_name = element_info['locator_type'] locator_value_info = element_info['locator_value'] locator_timeout = element_info['timeout'] if locator_type_name == 'id': locator_type = By.ID elif locator_type_name == 'name': locator_type = By.NAME elif locator_type_name == 'class': locator_type = By.CLASS_NAME elif locator_type_name == 'xpath': locator_type = By.XPATH element = WebDriverWait(self.driver , locator_timeout)\ .until(lambda x:x.find_element(locator_type,locator_value_info)) logger.info('[%s]元素识别成功' % element_info['element_name']) # element = WebDriverWait(self.driver, locator_timeout)\ # .until(EC.presence_of_element_located((locator_type, locator_value_info))) except Exception as e: logger.error('[%s]元素不能识别,原因是%s' % (element_info['element_name'], e.__str__())) self.screenshot_as_file() # finally: # if element is None: # element = '' return element
def find_element(self, element_info): try: element_name = element_info['element_name'] locator_type = element_info['locator_type'] locator_value = element_info['locator_value'] timeout = element_info['timeout'] if locator_type == 'id': locator_type = By.ID elif locator_type == 'name': locator_type = By.NAME elif locator_type == 'class': locator_type = By.CLASS_NAME elif locator_type == 'xpath': locator_type = By.XPATH elif locator_type == 'css': locator_type = By.CSS_SELECTOR elif locator_type == 'link': locator_type = By.LINK_TEXT # 相当于 element = driver.find_element(By.ID,value) element = WebDriverWait(self.driver, timeout).until( lambda x: x.find_element(locator_type, locator_value)) logger.info('[%s]元素识别成功' % element_name) return element except Exception as e: logger.error('[%s]识别失败,失败原因%s' % (element_name, e.__str__())) self.screentshot_as_file()
def click(self, element_info): element = self.find_element(element_info) try: element.click() logger.info('[%s]元素进行点击操作' % element_info['element_name']) except Exception as e: logger.error('[%s]元素进行点击操作失败,原因是%s' % e.__str__())
def find_element(self, element_info): """ 根据提供的元素参数信息进行元素查找 :param element_info: 元素信息,字典类型 :return: element对象 """ try: locator_type_name = element_info['locator_type'] locator_value_info = element_info['locator_value'] locator_timeout = element_info['timeout'] if locator_type_name == 'id': locator_type = By.ID elif locator_type_name == 'class': locator_type = By.CLASS_NAME elif locator_type_name == 'xpath': locator_type = By.XPATH elif locator_type_name == 'link_text': locator_type = By.LINK_TEXT elif locator_type_name == 'css_selector': locator_type = By.CSS_SELECTOR elif locator_type_name == 'name': locator_type = By.NAME elif locator_type_name == 'partial_link_text': locator_type = By.PARTIAL_LINK_TEXT elif locator_type_name == 'tag_name': locator_type = By.TAG_NAME element = WebDriverWait(self.driver,locator_timeout)\ .until(lambda x:x.find_element(locator_type, locator_value_info)) logger.info('[%s]元素识别成功' % element_info['element_name']) except Exception as e: logger.error('[%s]元素不能识别,原因是%s' % (element_info['element_name'], e.__str__())) self.screenshot_as_file() return element
def get_alert_text(self): try: time.sleep(5) alert_text = self.driver.switch_to.alert.text logger.info('获取弹出框文本' + alert_text) return alert_text except Exception as e: logger.error('获取弹出框文本失败%s' % e)
def get_text(self, element_info): try: element = self.find_element(element_info) test_text = element.text logger.info('获取文本成功' + test_text) return test_text except Exception as e: logger.error('获取文本失败%s' % e)
def get(self, public_id): """get a user given its identifier""" LOG.error('=================---------------------- get a user..') user = get_a_user(public_id) if not user: api.abort(404, message='Nie znaleziono użytkownika') else: return build_json_result(user)
def get_drop_down(self, element_info, index): try: element = self.find_element(element_info) li = element.find_elements_by_tag_name('li') select_text = str(li[int(index)].text) li[int(index)].click() logger.info('选择下拉框的内容为%s' % select_text) except Exception as e: logger.error('选择下拉框失败,失败原因为%s' % e)
def input(self, element_info, content): try: element = self.find_element(element_info) element.send_keys(content) logger.info('[%s]元素输入数据: %s' % (element_info['element_name'], content)) except Exception as e: logger.error('[%s]元素输入数据错误, 错误为:%s' % (element_info['element_name'], e.__str__()))
def get(self): limit = request.args.get('limit') offset = request.args.get('offset') """List all registered users""" LOG.error('=================---------------------- getting all user..') LOG.warning( '=================---------------------- getting all user..') LOG.info(request.headers) return build_json_result(get_all_users(limit, offset))
def click(self, element_info): element = self.find_element(element_info) try: element.click() logger.info('【%s】元素进行点击操作' % element_info['element_name']) except Exception as e: logger.error('【%s】元素不能点击,原因是:%s' % (element_info['element_name'], e.__str__())) self.screenshot_as_file()
def open_url(self, url=None): """ 浏览器操作封装 """ try: self.driver.get(url) logger.info('打开url地址%s' % url) except Exception as e: logger.error('无法打开指定网址,原因书%s' % e.__str__())
def get_access_token_api(session, url_params): logger.info('执行调用【get_access_token_api】开始') try: response = session.get(url='https://%s/cgi-bin/token' % config.HOSTS, params=url_params) # params 参数的值就可以试字典类型的url参数 except RequestException as e: logger.error('请求出现异常,错误原因:%s' % e.__str__()) finally: logger.info('执行调用【get_access_token_api】结算') return response
def get_access_token_api(session, url_params): logger.info('————————————执行调用get_access_token_api接口开始——————————') try: response = session.get(url='https://%s/cgi-bin/token' % config.HOSTS, params=url_params) except RequestException as e: logger.error('请求出现异常,错误原因是:%s' % e.__str__()) finally: logger.info('————————————执行调用get_access_token_api接口结束——————————') return response
def driver(self): """ 根据driver名启动对应driver,不确定Windows和Mac是不是所有driver前缀名都一样 """ if 'chrome' in Config().driver_path: return self.__get_chrome_driver() logger.info('使用chrome浏览器打开') elif 'gecko' in Config().driver_path: return self.__get_firefox_driver() logger.info('使用firefox浏览器打开') else: logger.error('webdriver启动出错。')
def click(self, element_info): """ 元素点击操作 """ element = self.find_element(element_info) try: element.click() logger.info('[%s]点击操作成功' % element_info['element_name']) except Exception as e: logger.error('[%s]元素点击失败,原因是%s' % (element_info['element_name'], e.__str__())) self.screenshot_as_file()
def create_user_tag_api(session, hosts, token_id, post_data): # logger.info('调用create_user_tag接口') str_data = json.dumps(post_data, ensure_ascii=False) response = None try: response = session.post( url='https://%s/cgi-bin/tags/create?access_token=%s' % (hosts, token_id), data=str_data.encode('utf-8')) except RequestException as e: logger.error('调调用create_user_tag接口失败,原因是%s' % e.__str__()) # e表示对象,把文档字符串打印出来 return response
def get_access_token_api(session, hosts, appid, secret, grant_type='client_credential'): logger.info('调用获取access_token接口') get_param_dict = { "grant_type": grant_type, "appid": appid, "secret": secret } response = None try: response = session.get(url='https://%s/cgi-bin/token' % hosts, params=get_param_dict) except RequestException as e: logger.error('调用获取access_token接口失败,原因是%s' % e.__str__()) return response
def find_element(self,element_info): try: locator_type_name=element_info['locator_type'] locator_value_info=element_info['locator_value'] locator_timeout=element_info['timeout'] if locator_type_name =='id': locator_type=By.ID elif locator_type_name=='class': locator_type=By.CLASS_NAME elif locator_type_name=='xpath': locator_type=By.XPATH # 识别元素 element=WebDriverWait(self.driver,locator_timeout)\ .until(lambda x:x.find_element(locator_type,locator_value_info)) logger.info('[%s]元素识别成功'%element_info['element_name']) except Exception as e: logger.error('[%s]元素不能识别,原因是%s' % (element_info['element_name'], e.__str__())) self.screenshot_as_file() # 失败后截屏 return element
def get_access_token_apiget_access_token_api(session, HOSTS, secret, appid, grant_type='client_credential'): logger.info('开始验证是否能正常获取token_id') get_param_dict = { "grant_type": grant_type, "appid": appid, "secret": secret } try: response = session.get(url='https://%s/cgi-bin/token' % HOSTS, params=get_param_dict, verify=False) response = response.json() except RequestException as e: logger.error('调用获取access_token接口失败,原因是%s' % e.__str__()) return response