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

Selenium自动化Electron应用:规避文件夹弹窗超时异常方案咨询

解决方案

你的理解是对的:Selenium的Click()方法默认会等待页面的document.readyState变为complete,但弹出Windows原生文件夹选择对话框后,Electron应用的主页面并没有进行新的加载,WebDriver会一直等待直到超时抛出WebDriverException。下面是两种可行的优化方案:

方案一:调整页面加载超时(你的方向是对的)

在点击按钮前临时缩短页面加载超时时间,避免长时间等待,操作完成后恢复原设置,不影响后续流程:

// 保存原有页面加载超时设置
var originalPageLoadTimeout = driver.Manage().Timeouts().PageLoad;
// 设置短超时(比如10秒)
driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(10);

try
{
    // 点击打开文件夹选择弹窗的按钮
    driver.FindElement(By.CssSelector("button.open-folder")).Click();
}
catch (WebDriverException)
{
    // 捕获超时异常,此时弹窗已弹出,直接继续
}
finally
{
    // 恢复原有超时设置
    driver.Manage().Timeouts().PageLoad = originalPageLoadTimeout;
}

// 用H.InputSimulator完成路径输入和确认
var inputSim = new InputSimulator();
inputSim.Keyboard.TextEntry(@"D:\Your\Target\Folder");
inputSim.Keyboard.KeyPress(VirtualKeyCode.RETURN);

方案二:用JavaScript执行点击(更优)

通过IJavaScriptExecutor执行点击操作,绕过Selenium默认的页面加载等待逻辑,无需捕获异常:

// 定位打开弹窗的按钮
var openFolderBtn = driver.FindElement(By.Id("open-folder-button"));
// 用JS触发点击,不会触发页面加载等待
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].click();", openFolderBtn);

// 直接执行模拟键盘操作
var inputSim = new InputSimulator();
inputSim.Keyboard.TextEntry(@"D:\Your\Target\Folder");
inputSim.Keyboard.KeyPress(VirtualKeyCode.RETURN);

方案二更推荐,因为它完全避免了异常捕获的环节,流程更简洁,也不会因超时设置影响其他操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 23:32:36