C# 如何实现点击按钮动态生成文本框列表并通过Selenium提交内容
实现动态增删文本框+Selenium提交的方案
你现有代码的核心问题是完全没有和UI控件生成逻辑绑定,每次点击按钮都重复创建了一个无意义的静态字符串列表,也没有生成新的文本框控件,逻辑和需求完全不匹配。
以下是WPF框架下的可运行实现方案,如果你用的是Winform,仅需替换对应控件属性、布局添加逻辑即可,核心思路通用:
第一步:定义全局存储容器
在窗体类的全局范围定义两个容器,分别存储动态生成的文本框、承载动态控件的布局容器:
// 存储所有动态生成的采购项文本框 private List<TextBox> _groceryItemBoxes = new List<TextBox>(); // 提前在前台XAML中放一个名为ItemPanel的StackPanel,作为动态控件的承载容器
第二步:实现+按钮点击新增文本框逻辑
替换你原有plusbutton_Click的代码:
private void plusbutton_Click(object sender, RoutedEventArgs e) { // 1. 实例化新文本框,设置基础样式 var newTextBox = new TextBox { Margin = new Thickness(0, 5, 0, 5), // 上下预留间距避免控件粘在一起 PlaceholderText = "请输入采购内容,例如:买鸡蛋" }; // 2. 把新文本框添加到UI布局、全局存储列表 ItemPanel.Children.Add(newTextBox); _groceryItemBoxes.Add(newTextBox); }
如果需要支持删除单项,可以在创建文本框的同时生成一个删除按钮,和文本框放在同一行的横向布局容器中,点击删除按钮时同步移除UI中的控件和全局列表里的对应项即可。
第三步:实现Selenium提交逻辑
需要提交内容到网页时,遍历全局列表获取所有非空输入内容,调用Selenium的SendKeys方法发送即可:
private void SubmitBtn_Click(object sender, RoutedEventArgs e) { // 你的Selenium驱动初始化逻辑保留即可,以下为示例 // ChromeDriver driver = new ChromeDriver(); // driver.Navigate().GoToUrl("你的目标采购网页地址"); // 遍历所有采购文本框,发送非空内容 foreach (var textBox in _groceryItemBoxes) { var itemContent = textBox.Text.Trim(); if (string.IsNullOrEmpty(itemContent)) continue; // 替换为你实际的网页元素定位逻辑 var targetInput = driver.FindElement(By.Id("目标网页输入框的元素ID")); targetInput.SendKeys(itemContent); // 如需逐个提交可以加回车:targetInput.SendKeys(Keys.Enter); } }
内容的提问来源于stack exchange,提问作者golden leo
相关产品推荐
相关产品推荐

