python+selenium+pytest->web自动化测试,页面上元素执行不稳定的情况除了显示等待还有其他好的解决方式吗

问题

web自动化测试中,页面中存在输入框元素,当前页面非必填,跳转之后该元素又是必填项,在第一个页面中定位时也添加了显示等待但是脚本执行还是不稳定,有时候工号输入不成功,但是因为当前页面是非必填,能继续往下走,走到下个页面就会因为没有输入工号而卡住,这种问题有好的解决方式吗

报错信息


环境

可能由于页面元素未加载完成倒是的,适量加上等待或者,确认页面的状态是正确的。通过检查特定元素的存在性、状态或属性来实现。比如检查页面中的属性状态是否加载完成。
或者在执行的关键步骤加上日志,将报错信息保存好,和研发一起排查一下元素不稳定的问题一起解决一下。

脚本中怎么针对页面中的元素属性是否加载完成做检查?有示例么,另外,能看出页面中哪个元素加载比较慢吗,如果可以,我就在执行页面元素前加上等这个最难加载的元素加载完成后我再执行后面的元素操作

1. 使用JavaScript执行检查页面元素属性

你可以使用 Selenium 的 execute_script 方法来执行 JavaScript 代码,检查页面元素的加载状态或属性是否已设置好。例如,如果你需要确保某个输入框的 required 属性在第二个页面已经设置好

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

# 等待页面加载完成
WebDriverWait(driver, 10).until(
    lambda driver: driver.execute_script("return document.readyState") == "complete"
)

# 检查元素的 'required' 属性
element = driver.find_element(By.ID, "element_id")
is_required = driver.execute_script("return arguments[0].required;", element)

if not is_required:
    raise Exception("Element is not required, cannot proceed.")

2. 检查元素的特定属性或状态

执行任何操作之前,检查元素的特定属性或状态。例如,在尝试输入工号之前,确保输入框已经启用且可见:

input_box = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, "input_id"))
)

# 确保输入框已启用
if input_box.is_enabled():
    input_box.send_keys("工号")
else:
    raise Exception("Input box is not enabled.")

3. 检查元素是否加载完成

通过 JavaScript 可以检查页面中所有元素的加载时间,并找出哪个元素加载较慢:

slow_element = driver.execute_script("""
    let slowestElement = null;
    let maxTime = 0;
    document.querySelectorAll('*').forEach(el => {
        const time = performance.getEntriesByName(el.tagName.toLowerCase() + "#" + el.id + "." + el.className)[0]?.startTime || 0;
        if (time > maxTime) {
            maxTime = time;
            slowestElement = el;
        }
    });
    return slowestElement;
""")

if slow_element:
    print(f"Slowest element: {slow_element.tag_name} with id: {slow_element.