You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Selenium对集成Okta的应用执行UI性能及可用性检测

集成Okta认证的Selenium UI自动化测试方案

前置Okta配置

首先需要在Okta后台完成测试账号的配置,避免走推送验证流程:

  • 申请独立的测试专用账号,不要和日常使用的账号复用,避免权限泄露风险
  • 可选方案1:为该测试账号配置IP白名单,直接豁免MFA验证,是最省事的方案
  • 可选方案2:如果公司安全规范不允许免MFA,就给测试账号绑定TOTP验证器,保存好TOTP生成的静态密钥,后续可以直接用Python代码生成动态验证码,完全不需要依赖推送通知

代码改造步骤

你需要额外安装两个依赖:pyotp(用来生成TOTP验证码)、webdriver-manager(可选,自动管理chromedriver版本,避免版本不匹配问题),安装命令:
pip install pyotp webdriver-manager

改造后的完整示例代码如下,替换对应配置项即可使用:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pyotp
from webdriver_manager.chrome import ChromeDriverManager

# -------------------------- 替换为你自己的配置 --------------------------
APP_URL = "你要测试的应用地址"
OKTA_USERNAME = "测试账号用户名"
OKTA_PASSWORD = "测试账号密码"
# 如果用免MFA方案,下面这行留空即可
TOTP_SECRET = "你在Okta绑定TOTP时拿到的静态密钥"
# ----------------------------------------------------------------------

# 配置Chrome无头模式,适配无图形界面的定时任务运行环境
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--window-size=1920,1080")

# 初始化driver,用webdriver_manager自动管理chromedriver版本
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
driver.implicitly_wait(10)

try:
    # 打开目标应用,会自动跳转到Okta登录页
    driver.get(APP_URL)
    
    # 等待Okta用户名输入框加载完成,输入用户名
    username_input = WebDriverWait(driver, 15).until(
        EC.presence_of_element_located((By.NAME, "username"))
    )
    username_input.send_keys(OKTA_USERNAME)
    username_input.send_keys(Keys.RETURN)
    
    # 输入密码
    password_input = WebDriverWait(driver, 15).until(
        EC.presence_of_element_located((By.NAME, "password"))
    )
    password_input.send_keys(OKTA_PASSWORD)
    password_input.send_keys(Keys.RETURN)
    
    # 如果配置了TOTP密钥,就生成验证码输入
    if TOTP_SECRET:
        totp = pyotp.TOTP(TOTP_SECRET)
        totp_code = totp.now()
        totp_input = WebDriverWait(driver, 15).until(
            EC.presence_of_element_located((By.NAME, "answer"))
        )
        totp_input.send_keys(totp_code)
        totp_input.send_keys(Keys.RETURN)
    
    # 等待跳转回你的应用,确认登录成功
    WebDriverWait(driver, 15).until(
        EC.url_contains(APP_URL.split("//")[1].split("/")[0])
    )

    # -------------------------- 下面写你自己的测试逻辑 --------------------------
    # 示例:打印页面标题、当前URL
    print("登录成功,页面标题:", driver.title)
    print("当前页面地址:", driver.current_url)
    
    # 示例:性能数据采集
    perf_data = driver.execute_script("return performance.timing")
    load_time = (perf_data['loadEventEnd'] - perf_data['navigationStart'])/1000
    print(f"页面总加载耗时:{load_time}秒")

    # 示例:检查页面是否有异常关键词
    page_source = driver.page_source
    if "502 Bad Gateway" in page_source or "403 Forbidden" in page_source:
        print("检测到网关异常!")
        # 可以在这里加告警逻辑,比如发邮件、发企业微信消息
        # 异常场景截图:driver.save_screenshot("/opt/uitest/error.png")

finally:
    # 确保不管测试是否成功,都关闭driver释放资源
    driver.quit()

如果你的Okta登录页的元素选择器和示例不一致,可以用浏览器F12开发者工具自行定位对应的输入框元素,替换代码里的By.NAME参数即可

cron定时任务配置注意事项

  • 写crontab的时候建议指定完整的Python解释器路径和脚本路径,避免找不到依赖
  • 可以配置任务运行日志输出,示例:0 * * * * /usr/bin/python3 /opt/uitest/test.py >> /var/log/okta_ui_test.log 2>&1,方便排查任务运行异常
  • 建议每次运行前检查是否有残留的chromedriver或Chrome进程,避免内存泄露,可以在脚本开头加清理逻辑,或者用tmpfs挂载临时目录减少资源占用

内容的提问来源于stack exchange,提问作者Vinita Shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 21:54:03