Пример #1
0
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)
Пример #2
0
 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
Пример #3
0
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)
Пример #4
0
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))
Пример #5
0
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)
Пример #6
0
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()