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
相关产品推荐
相关产品推荐

