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()