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

C#使用Selenium时SendKeys(Keys.PageDown)多次触发如何改为单次执行

解决方法

问题根因

SendKeys(Keys.PageDown)重复触发通常由3个原因导致:

  • Selenium默认的元素交互重试机制,元素未完全就绪时发送按键会触发多次重试
  • 原生<select>下拉框展开后,浏览器驱动对按键事件的派发逻辑存在重复执行的已知问题
  • 固定Thread.Sleep()等待逻辑不稳定,无法保证按键操作在正确的交互时机触发

可行解决方案

方案1:使用Actions类执行单次按键(推荐,适配现有逻辑改动最小)

Actions类的交互操作不会触发Selenium默认的元素交互重试,能保证按键仅执行一次,同时替换不稳定的Thread.Sleep为显示等待提升稳定性:

using OpenQA.Selenium.Interactions;
using OpenQA.Selenium.Support.UI;

IWebElement ledgerCreateFolder = driver.FindElement(By.XPath("//select [@data-val-number = 'The field id_fp_ledger_parent must be a number.']"));
// 显示等待元素可交互
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(2));
wait.Until(d => ledgerCreateFolder.Displayed && ledgerCreateFolder.Enabled);

ledgerCreateFolder.Click();
// 等待下拉选项加载完成
wait.Until(d => d.FindElement(By.XPath("./option", ledgerCreateFolder)).Displayed);

// 用Actions执行单次PageDown
new Actions(driver)
    .SendKeys(ledgerCreateFolder, Keys.PageDown)
    .Perform();

// 等待选项选中状态更新
wait.Until(d => !string.IsNullOrEmpty(ledgerCreateFolder.GetAttribute("value")));
ledgerCreateFolder.SendKeys(Keys.Enter);

方案2:直接操作Select下拉框选项(最稳定,无需模拟按键)

如果你的需求是选中下拉框的指定选项,直接用Selenium内置的SelectElement类操作即可,完全不需要模拟键盘输入:

using OpenQA.Selenium.Support.UI;

IWebElement ledgerCreateFolder = driver.FindElement(By.XPath("//select [@data-val-number = 'The field id_fp_ledger_parent must be a number.']"));
var select = new SelectElement(ledgerCreateFolder);
// 按索引选择第二个选项(索引从0开始,对应按一次PageDown的效果)
select.SelectByIndex(1);
// 也可按需按文本/值选择:
// select.SelectByText("目标选项显示文本");
// select.SelectByValue("目标选项的value属性值");

方案3:临时关闭隐式等待避免重试

如果必须使用原生SendKeys方法,可以临时关闭隐式等待避免触发Selenium的重试逻辑,操作完成后恢复原设置即可:

// 保存原有隐式等待配置
var originalImplicitWait = driver.Manage().Timeouts().ImplicitWait;
// 临时关闭隐式等待
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(0);

ledgerCreateFolder.SendKeys(Keys.PageDown);

// 恢复原有隐式等待配置
driver.Manage().Timeouts().ImplicitWait = originalImplicitWait;

内容的提问来源于stack exchange,提问作者syRoK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:27:05