Python Selenium如何为多脚本对应输入框传入差异化参数
Selenium批量为多行脚本输入框传差异化参数方案
你现有代码无法实现差异化传参的核心原因有两点:
- 行定位硬编码了
clr-dg-row[1],循环全程只会定位第一行的输入框 - 传入的参数值写死为固定字符串,没有建立参数和输入框的对应关系
实现方法
- 提前把每个脚本对应的专属参数,按照页面上脚本的从上到下展示顺序整理为列表,列表索引和页面行号一一对应
- 改造循环逻辑,遍历时动态拼接当前行的XPath定位,依次给对应行输入框传入列表中对应位置的参数
- 增加简单的等待逻辑,适配页面动态加载的场景,避免元素定位报错
可直接修改使用的代码
from selenium.webdriver.common.by import By import time # 点击批量运行入口按钮 driver.find_element(By.XPATH, '//*[@id="side-maincontainer-wrapper"]/div/div/div[2]/earms-suitehome/div/div/div/div/div[2]/div[2]/div[1]/earms-categorydetails/div/div/div[3]/div[2]/clr-datagrid/clr-dg-action-bar/button[3]').click() # ========== 需自行替换的部分 ========== # 按页面脚本从上到下的顺序,填入每个脚本对应的专属参数即可 script_args = [ "--crft --crft-devices pireg-nyquist1-1 pireg-nyquist1-2 --btrace-devices uut --btrace --configuration /auto/arf1/vramiyen/pyats_crft/SELinux_plugin/config.yaml --selinux --selinux-devices uut --template /auto/bgl-xeinfra/pmotukan/template.input --platform /auto/arf1/vramiyen/pyats_crft/SELinux_plugin/platform.py", "第2个脚本的专属命令行参数", "第3个脚本的专属命令行参数", # 依次补全剩下所有脚本的参数,共近100条 ] # ====================================== # 等待参数配置页加载完成,可根据实际页面响应速度调整时长 time.sleep(3) # 输入框基础XPath,预留行号占位符 input_base_xpath = '//*[@id="side-maincontainer-wrapper"]/div/div/div[2]/earms-requestrunhome/earms-testbedselection/div/div/div/div/div[2]/div/div[1]/div/form/div/div/div/div/div/div/clr-datagrid/div/div/div/clr-dg-table-wrapper/div[2]/clr-dg-row[{row_index}]/div/clr-dg-cell[3]/input//div' for idx in range(len(script_args)): # 动态拼接当前行的定位,页面行号从1开始,所以索引+1 current_input = driver.find_element(By.XPATH, input_base_xpath.format(row_index=idx + 1)) # 清空输入框原有默认内容 current_input.clear() # 传入当前脚本对应的专属参数 current_input.send_keys(script_args[idx]) # 短等待适配页面渲染,可根据实际情况调整或删除 time.sleep(0.3)
可选优化
- 如果页面脚本顺序不固定,可以先遍历所有行拿到脚本名称字段,用
{脚本名称: 对应参数}的字典做映射,不需要严格按顺序填参数,容错率更高 - 可以把固定时长的
time.sleep()替换为Selenium的显式等待WebDriverWait,判断元素可交互后再操作,整体运行速度会更快
内容的提问来源于stack exchange,提问作者User0607
相关产品推荐
相关产品推荐

