def create_excel(path, rows=1000, sheet_name="Sheet1"): if len(path) > 3: if path[-5:] == ".xlsx": excel_path = path else: log.error("文件格式不正确") return 0 else: log.error("文件不正确") return 0 wb = Workbook() # wb = load_workbook(path) wb.active sheet = wb.create_sheet(sheet_name, 0) sheet2 = wb.create_sheet("系统数据", 1) # sheet = wb["Sheet1"] titles = ["用例标题", "页面操作", "元素路径", "输入内容", "其他说明"] types = [ "get", "input_text", "assertElementisExist", "assertText", "assertElementText", "wait", "wait_elements", "refresh", "click", "slow_click" ] # sheet2=wb["Sheet2"] for k, t in enumerate(types): sheet2["A{}".format(k + 1)].value = t border = Border(left=Side(border_style="thin", color="00000000"), right=Side(border_style="thin", color="00000000"), top=Side(border_style="thin", color="00000000"), bottom=Side(border_style="thin", color="00000000")) fill = PatternFill("solid", fgColor="4472C4") font = Font(name="等线", size=11, bold=False, italic=False, color='00FFFFFF') for k, title in enumerate(titles): col = chr(ord("A") + k) + "1" cell = sheet[col] cell.border = border cell.fill = fill cell.font = font cell.value = title sheet.column_dimensions[chr(ord("A") + k)].width = 22 sheet.row_dimensions[1].height = 22 dv = DataValidation(type="list", formula1="{0}!$A$1:$A${1}".format( quote_sheetname("系统数据"), len(types)), allow_blank=True) sheet.add_data_validation(dv) row = 2 for _ in range(rows): dv.add(sheet["B{}".format(row)]) row += 1 wb.save(excel_path)
def wait_elements(self, interval=0.5, element=None): """ if element is display return True not return False """ if element is None: raise NameError("please input element") try: WebDriverWait(Fxtest.driver, Fxtest.timeout, interval).until( expected_conditions.presence_of_element_located( (By.XPATH, element))) return True except Exception: log.error("Not Find {}".format(element)) return False
def find_element(elem): for _ in range(Fxtest.timeout): elems = Fxtest.driver.find_elements(by=elem[0], value=elem[1]) if len(elems) == 1: log.info(" Find element: {by}={value} ".format(by=elem[0], value=elem[1])) break elif len(elems) > 1: log.info(" Find {n} elements through: {by}={value}".format( n=len(elems), by=elem[0], value=elem[1])) break else: time.sleep(1) else: error_msg = " Find 0 elements through: {by}={value}".format( by=elem[0], value=elem[1]) log.error(error_msg) raise NotFindElementError(error_msg)
def Browser(name=None, driver_path=None, grid_url=None, **kwargs): """ Run class initialization method, the default is proper to drive the Firefox browser. Of course, you can also pass parameter for other browser, Chrome browser for the "Chrome", the Internet Explorer browser for "internet explorer" or "ie". :param name: Browser name :param driver_path: Browser driver path :param grid_url: Either a string representing URL of the remote server or a custom remote_connection.RemoteConnection object. :return: """ if name is None: name = "chrome" if name in ["firefox", "ff"]: if driver_path is not None: return webdriver.Firefox(executable_path=driver_path, proxy=BrowserConfig.proxy) if grid_url is not None: return webdriver.Remote( command_executor=grid_url, desired_capabilities=DesiredCapabilities.FIREFOX.copy(), proxy=BrowserConfig.proxy) return webdriver.Firefox() elif name in ["chrome", "google chrome", "gc"]: if driver_path is not None: return webdriver.Chrome(executable_path=driver_path) if grid_url is not None: return webdriver.Remote( command_executor=grid_url, desired_capabilities=DesiredCapabilities.CHROME.copy()) return webdriver.Chrome() # elif name == ["internet explorer", "ie", "IE"]: # return webdriver.Ie() # elif name == "opera": # return webdriver.Opera() elif name == "chrome_headless": chrome_options = CH_Options() chrome_options.add_argument('--headless') if driver_path is not None: return webdriver.Chrome(chrome_options=chrome_options, executable_path=driver_path) return webdriver.Chrome(chrome_options=chrome_options) elif name == "firefox_headless": firefox_options = FF_Options() firefox_options.headless = True if driver_path is not None: return webdriver.Firefox(firefox_options=firefox_options, executable_path=driver_path) return webdriver.Firefox(firefox_options=firefox_options) elif name == "Android": if "config" not in kwargs.keys(): log.debug("请填写android 机的配置信息") return 0 else: try: with open(kwargs.get("config", "resource/Android_Config.yaml"), "r", encoding="utf-8") as f: config = yaml.safe_load(f) except FileNotFoundError as e: log.error(e) return 0 aconfig = AndroidConfig() RemoteUrl = config.get("remote") if RemoteUrl is None: log.error("请检查配置文件") return 0 else: config.pop("remote") for i in config: setattr(aconfig, i, config[i]) return androiddriver.Remote(RemoteUrl, config) # elif name == 'edge': # return webdriver.Edge() # elif name == 'safari': # return webdriver.Safari() # elif name in PHONE_LIST: # options = CH_Options() # options.add_experimental_option("mobileEmulation", {"deviceName": name}) # driver = webdriver.Chrome(chrome_options=options, executable_path=driver_path) # driver.set_window_size(width=480, height=900) # return driver # elif name in PAD_LIST: # options = CH_Options() # options.add_experimental_option("mobileEmulation", {"deviceName": name}) # driver = webdriver.Chrome(chrome_options=options, executable_path=driver_path) # driver.set_window_size(width=1100, height=900) # return driver else: raise NameError("Not found '{}' browser.".format(name))
def create_test_case(path, py_path, sheet_name="Sheet1"): if len(path) > 3: if os.path.exists(path): if path[-5:] == ".xlsx": excel_path = path else: log.error("文件格式不正确") return 0 else: log.error("文件不存在") return 0 else: log.error("文件不正确") return 0 if len(py_path) > 3: if os.path.exists(py_path) is False: if path[-3:] == ".py": py_path = py_path else: log.error("文件格式不正确") return 0 else: log.error("文件已存在") return 0 else: log.error("文件不正确") return 0 test_sample = """ import fxtest import pytest class Test_{class_name}(fxtest.TestCase): """ class_name = os.path.basename(excel_path).split(".")[0] test_sample = test_sample.format(class_name=class_name) wb = load_workbook(excel_path) flag = None sheet = wb.get_sheet_by_name(sheet_name) col_range = sheet["A"] case_intervel = [] for k, col in enumerate(col_range): if col.value != None: if col.value != "用例标题": case_intervel.append(k) for k, case in enumerate(case_intervel): while True: if k < len(case_intervel) - 1: if case == case_intervel[k + 1]: break else: if case == sheet.max_row: break case_content = [] for field in list(sheet.rows)[case]: case_content.append(field.value)
def main(browser=None, path=None, timeout=10, htmlpath=None, cmds="-s", debug=True, **kwargs): if browser is None: BrowserConfig.name = "chrome" else: BrowserConfig.name = browser if isinstance(timeout, int): Fxtest.timeout = timeout else: raise TypeError("Timeout {} is not integer.".format(timeout)) """ """ Fxtest.driver = Browser(name=BrowserConfig.name, grid_url=BrowserConfig.grid_url, **kwargs) filename = "report" allure_name = "allure-results" allure_report_path = "allure-report" if filename not in os.listdir(os.getcwd()): os.mkdir(os.path.join(os.getcwd(), filename)) # if allure_name not in os.listdir(os.getcwd()): # os.mkdir(os.path.join(os.getcwd(),allure_name)) allure_report = os.path.join(os.getcwd(), allure_name) BrowserConfig.allure_path = allure_report if htmlpath is None: now = time.strftime("%Y_%m_%d_%H_%M_%S") report = os.path.join(os.getcwd(), filename, now + "_result.html") BrowserConfig.report_path = report else: report = os.path.join(os.getcwd(), filename, report) BrowserConfig.report_path = report try: cmd_list = cmds.split(" ") except Exception: log.error("参数错误") for cmd in cmd_list: if "--fxtest-html" in cmd: cmd_list.remove(cmd) if debug == False: cmd_list.append("--fxtest-html={}".format(BrowserConfig.report_path)) cmd_list.append("--alluredir={}".format(BrowserConfig.allure_path)) if path is None: stack_t = inspect.stack() ins = inspect.getframeinfo(stack_t[1][0]) file_dir = os.path.dirname(os.path.abspath(ins.filename)) file_path = ins.filename if "\\" in file_path: this_file = file_path.split("\\")[-1] elif "/" in file_path: this_file = file_path.split("/")[-1] else: this_file = file_path test_path = os.path.join(file_dir, this_file) else: if len(path) > 3: if path[-3] == ".py": test_path = path else: test_path = path cmd_list.append(test_path) try: Fxtest.driver.maximize_window() except Exception as e: log.warn(e) pass pytest.main(cmd_list) if debug == False: allure_generate = "allure generate {0} --clean -o {1}".format( BrowserConfig.allure_path, allure_report_path) res = os.system(allure_generate) if res == 0: log.info("成功生成allure 报告") else: log.info("生成allure报告失败") """ """ Fxtest.driver.quit()