fixture

conftest.py

import os
import pytest
from selenium import webdriver
from selenium.webdriver import ChromeOptions
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from pages.trunk import Trunk
from configs.settings import BASE_DIR, SCREENSHOT, REPORT_DIR, ENV_API_TXT_FILE, ENV_WEB_TXT_FILE
from libraries.logger import log


def unlink_handler(file):
    try:
        os.unlink(file)
    except FileNotFoundError:
        pass


@pytest.fixture(scope='session', autouse=True)
def env_clear():
    os.chdir(SCREENSHOT)
    for i in os.listdir(SCREENSHOT):
        unlink_handler(i)
    log.info(f"目錄{SCREENSHOT}已清空")
    os.chdir(REPORT_DIR)
    for i in os.listdir(REPORT_DIR):
        if i.endswith('.json') or i.endswith('.png') or i.endswith('.txt'):
            unlink_handler(i)
    log.info(f"目錄{REPORT_DIR}已清空")
    os.chdir(BASE_DIR)
    yield


def pytest_addoption(parser):
    """注冊自定義參數(shù) --api-url 到配置對象"""
    parser.addoption("--api-url", action="store",
                     default="https://apix.azazie.com/",
                     type=str,
                     help="將命令行參數(shù) '--api-url' 添加到 pytest 配置中")


@pytest.fixture(scope="session")
def api_env(request):
    """從配置對象中讀取自定義參數(shù)的值"""
    return request.config.getoption("--api-url")


@pytest.fixture(autouse=True)
def set_api_env(api_env):
    """將自定義參數(shù)的值寫入環(huán)境配置文件"""
    with open(ENV_API_TXT_FILE, 'w', encoding='utf-8') as f:
        f.write(api_env)
    log.info(f'--api-url:{api_env}')


def browser_options(is_local=False):
    """瀏覽器配置"""
    options = ChromeOptions()
    options.add_experimental_option('mobileEmulation', {'deviceName': 'iPhone X'})  # 手機(jī)模式
    if is_local is False:
        options.add_argument('--headless')  # 無頭模式
        options.add_argument('--no-sandbox')  # 讓Chrome執(zhí)行在root權(quán)限下(linux)
        options.add_argument('--disable-dev-shm-usage')
    # options.add_argument('window-size=375×812')  # 指定瀏覽器分辨率
    # options.add_argument("–-disable-web-security")  # 關(guān)閉安全策略
    options.add_argument('--disable-gpu')  # 禁用GPU加速
    options.add_argument('--disable-javascript')
    # options.add_argument('--incognito')  # 無痕模式
    options.add_argument('--allow-running-insecure-content')  # https頁面允許從http鏈接引用javascript/css/plug-ins
    # options.add_argument('--blink-settings=imagesEnabled=false')  # 不加載圖片
    options.add_experimental_option('excludeSwitches', ['enable-automation'])  # 屏蔽'CHROME正受到組件控制'的提示
    options.add_experimental_option(
        "prefs", {'credentials_enable_service': False,
                  'profile.password_manager_enabled': False,  # 屏蔽'保存密碼'提示框
                  'profile.default_content_setting_values': {'notifications': 2}}  # 屏蔽‘顯示通知’
    )
    # options.add_argument('--proxy-server=socks5://192.168.2.66:9005')  # 代理設(shè)置
    return options


@pytest.fixture
def driver_setup(base_url):
    """瀏覽器初始化/隱性等待時間設(shè)置"""
    try:
        desired_caps = DesiredCapabilities.CHROME
        desired_caps["javascriptEnabled"] = 'True'
        command_executor = 'http://lebbay:forautotest@18.211.96.2:4444/wd/hub'
        driver = webdriver.Remote(command_executor, desired_capabilities=desired_caps, options=browser_options()) \
            if os.path.exists('/user/src/test/az-web/') \
            else webdriver.Chrome(chrome_options=browser_options(is_local=True))
        # command_executor = 'http://18.209.177.82:30475/wd/hub'
        # driver = webdriver.Remote(command_executor, desired_capabilities=desired_caps, options=browser_options())
        driver.get(base_url)
        log.info(f"打開Chrome瀏覽器訪問URL:{base_url},當(dāng)前版本號abtest:{driver.get_cookie('abtest').get('value')}")
        log.info('設(shè)置瀏覽器窗口大小375×812')
        # 設(shè)置全局隱性等待時間,單位:s
        driver.implicitly_wait(30)
        log.info('設(shè)置隱性等待時間30s')
        tk = Trunk(driver)
        tk.close_coupon_wheel(is_activity=False)
    except Exception as e:
        log.error(f"WebDriver Exception:{e}")
        driver.quit()
    else:
        with open(ENV_WEB_TXT_FILE, 'w', encoding='utf-8') as f:
            f.write(base_url)
        yield driver
        log.info('關(guān)閉瀏覽器')
        driver.quit()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容