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

Selenium C#:无需点击聚焦Shadow-Dom网格元素实现滚动

问题:Shadow-Dom Grid组件滚动聚焦问题

我正在自动化Shadow-Dom中的Grid组件,需求是获取该动态Grid的所有行,因此需要执行滚动操作。但目前聚焦Grid时需点击首行,这会触发新页面打开,请问是否存在无需点击即可聚焦Grid以滚动至底部的方法?

已尝试的代码

ClickElement(element);
action.MoveToElement(GetElement(element)).SendKeys(pagingKey).Perform();

解决方案

1. 直接聚焦Grid容器而非点击行元素

用Focus()方法替代点击操作,直接将焦点设置到Grid的容器节点(而非首行),避免触发页面跳转:

IWebElement gridContainer = GetElement(gridContainerLocator);
gridContainer.Focus();
action.SendKeys(pagingKey).Perform();

2. 使用JavaScript直接滚动(推荐)

绕开焦点依赖,直接通过JS操作Grid的滚动条,这种方式更稳定,尤其适配Shadow-Dom场景:

IWebElement gridElement = GetElement(gridLocator);
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
// 滚动到Grid底部
js.ExecuteScript("arguments[0].scrollTop = arguments[0].scrollHeight;", gridElement);

如果Grid在Shadow-Dom内部,需先获取Shadow根节点再定位Grid:

IWebElement shadowHost = driver.FindElement(By.CssSelector("shadow-host-selector"));
IWebElement shadowRoot = (IWebElement)js.ExecuteScript("return arguments[0].shadowRoot;", shadowHost);
IWebElement gridContainer = shadowRoot.FindElement(By.CssSelector("grid-container-selector"));
// 执行滚动
js.ExecuteScript("arguments[0].scrollTop = arguments[0].scrollHeight;", gridContainer);

3. 模拟键盘操作前先定位容器

如果必须用键盘滚动键(如PageDown),可先将鼠标移动到Grid容器区域,再发送按键,无需点击:

IWebElement gridContainer = GetElement(gridContainerLocator);
action.MoveToElement(gridContainer).SendKeys(pagingKey).Perform();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:39:26