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

Python Selenium自动化测试:无法定位用户名与确认密码字段求助

OrangeHRM添加员工页面:用户名与确认密码字段的Selenium定位问题

我正在用Python Selenium做OrangeHRM的自动化测试,现在卡在了添加员工页面的用户名和确认密码字段定位上,求这两个字段的正确定位代码。

我尝试过的方法示例

  • 用户名字段的尝试代码:
username_field = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '(//input[@class="oxd-input oxd-input--active"])[1]')))
username_field.send_keys('TestUsername')
  • 密码字段可以正常工作:
Password = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//input[@type="password"]'))).send_keys('madara123')

我的完整代码

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

driver = webdriver.Firefox()

driver.get('https://opensource-demo.orangehrmlive.com/web/index.php/auth/login')

username = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//input[@placeholder="Username"]')))
username.send_keys('Admin')

password = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//input[@placeholder="Password"]')))
password.send_keys('admin123')

driver.maximize_window()

login_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//button[@type="submit"]')))
time.sleep(1)
login_button.click()

driver.get('https://opensource-demo.orangehrmlive.com/web/index.php/pim/viewEmployeeList')

addbtn = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//button[@class="oxd-button oxd-button--medium oxd-button--secondary"]')))
addbtn.click()

first_name = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//input[@class="oxd-input oxd-input--active orangehrm-firstname"]'))).send_keys('employe')
mid_name = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//input[@class="oxd-input oxd-input--active orangehrm-middlename"]'))).send_keys('x')
last_name = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//input[@class="oxd-input oxd-input--active orangehrm-lastname"]'))).send_keys('ONE')

# 等待复选框加载
checkbox = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//div[@class="oxd-switch-wrapper"]/label/input[@type="checkbox"]')))
# 用JavaScript点击复选框
driver.execute_script("arguments[0].click();", checkbox)

# 尝试定位用户名字段(失败)
username = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//label[text()="Username"]/following-sibling::div/input')))
username.send_keys('your_username')

# 密码字段正常
Password = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//input[@type="password"]'))).send_keys('madara123')

# 尝试定位确认密码字段(失败)
confirm_password_field = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '(//input[@class="oxd-input oxd-input--active"])[2]')))
confirm_password_field.send_keys(Password)

修复后的正确代码

针对用户名和确认密码字段,使用更稳定的定位方式,避免依赖动态变化的class或索引:

# 定位用户名字段:通过标签文本关联输入框
username_field = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.XPATH, '//div[contains(@class, "oxd-input-group") and .//label[text()="Username"]]//input'))
)
username_field.send_keys('TestUsername')

# 定位密码字段
password_field = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.XPATH, '//div[contains(@class, "oxd-input-group") and .//label[text()="Password"]]//input'))
)
password_field.send_keys('madara123')

# 定位确认密码字段:通过标签文本"Confirm Password"关联
confirm_password_field = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.XPATH, '//div[contains(@class, "oxd-input-group") and .//label[text()="Confirm Password"]]//input'))
)
confirm_password_field.send_keys('madara123')

说明

  1. 改用visibility_of_element_located代替presence_of_element_located,确保元素不仅存在还可见,避免定位到未渲染完成的元素
  2. 基于标签文本(如"Username"、"Confirm Password")和父容器定位,比依赖动态class或索引更稳定,因为OrangeHRM的class会随交互状态变化
  3. 确认密码字段不能直接传入Password变量(因为它是send_keys的返回值,为None),需要传入明文密码字符串

内容的提问来源于stack exchange,提问作者Md. Jahangir Alam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 00:23:22