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

Orange HRM平台UserRole下拉框无法选择Admin/ESS选项求助

解决Orange HRM UserRole下拉选项点击问题

核心问题分析

Orange HRM的UserRole下拉框不是原生HTML <select> 标签,是React渲染的自定义下拉组件,必须先点击触发下拉弹窗,再定位选项点击,不能直接用Selenium的Select类操作。

修正后的代码实现

1. 优化AddUserPage.py的下拉选择逻辑

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from BaseClass import BaseClass

class AddUserPage(BaseClass):
    # 定位UserRole下拉触发按钮(初始显示"-- Select --"的元素)
    USER_ROLE_DROPDOWN = (By.XPATH, "//div[contains(@class, 'oxd-select-text')]//div[text()='-- Select --']")
    # 选项定位模板,用占位符替换要选择的角色文本
    USER_ROLE_OPTION = "//div[@role='listbox']//div[normalize-space(text())='{}']"

    def select_user_role(self, role_text):
        # 点击下拉按钮展开选项列表
        self.click_element(self.USER_ROLE_DROPDOWN)
        # 动态生成目标选项的定位器,等待元素可点击后点击
        target_role_locator = (By.XPATH, self.USER_ROLE_OPTION.format(role_text))
        WebDriverWait(self.driver, 12).until(EC.element_to_be_clickable(target_role_locator)).click()

2. 确保BaseClass.py的通用函数可靠

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class BaseClass:
    def __init__(self, driver):
        self.driver = driver

    def click_element(self, locator):
        # 统一封装元素点击,加入等待避免超时
        WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable(locator)).click()

3. 结合Excel数据的测试用例(test_addUser.py)

import pytest
from selenium import webdriver
from AddUserPage import AddUserPage
import openpyxl

def load_test_data(excel_path):
    # 读取Excel中用户角色数据,假设第一列是角色,从第二行开始
    wb = openpyxl.load_workbook(excel_path)
    sheet = wb.active
    test_data = []
    for row_num in range(2, sheet.max_row + 1):
        role = sheet.cell(row=row_num, column=1).value
        test_data.append(role)
    return test_data

@pytest.mark.parametrize("user_role", load_test_data("user_test_data.xlsx"))
def test_add_user_with_role(user_role):
    driver = webdriver.Chrome()
    driver.get("https://opensource-demo.orangehrmlive.com/web/index.php/auth/login")
    
    # 补充登录逻辑(自行实现:定位用户名、密码输入框,点击登录)
    # 示例:
    # driver.find_element(By.NAME, "username").send_keys("Admin")
    # driver.find_element(By.NAME, "password").send_keys("admin123")
    # driver.find_element(By.XPATH, "//button[@type='submit']").click()

    # 进入添加用户页面(自行补充跳转逻辑)
    add_user_page = AddUserPage(driver)
    # 调用下拉选择函数,传入Excel中的角色文本
    add_user_page.select_user_role(user_role)
    
    # 后续测试步骤(如填写其他字段、提交等)
    driver.quit()

常见问题排查

  • 文本匹配问题:确保Excel中的角色文本和页面选项完全一致(注意大小写、首尾空格,用normalize-space()处理XPath可以忽略多余空格)
  • 元素加载超时:延长等待时间到10-15秒,确保下拉弹窗完全渲染
  • 定位重复元素:检查XPath是否唯一,避免定位到页面其他相似元素
  • 页面上下文错误:操作下拉前,确认当前页面是添加用户的正确页面,没有跳转或弹窗遮挡

内容的提问来源于stack exchange,提问作者vishal deshpande

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:25:06