C# Selenium 中 Actions 无法操作 Kendo DropDownList 怎么办?
数据小许
结论
如果代码和问题描述中的第一段 Actions 调用完全一致,最可能的问题是没有执行操作序列:MoveToElement(...).Click() 只是在构建操作,调用 Perform() 后才会将操作发送给浏览器。第二段调用了 Perform(),但只移动了鼠标,没有点击。悬停本身不一定会打开 Kendo DropDownList。
可以先这样验证:
IWebElement districtsList = modelAddInvoice.ReturnDistrictInvoiceAddDistrict();
new Actions(_browserFixture.EdgeDriver)
.MoveToElement(districtsList)
.Click()
.Perform();
点击后仍未打开时
代码通过 ReturnDistrictInvoiceAddDistrict() 获取了 districtsList,但没有提供 HTML 或定位器信息,因此无法确认它指向的是不是实际可点击的输入框或下拉按钮。Kendo DropDownList 通常由多个 DOM 元素组成。如果这个引用指向外层容器、隐藏元素或被覆盖的元素,点击可能无法触发控件。
可以按以下顺序排查:
- 确认
districtsList可见、已启用,并且指向用户实际点击的控件区域。 - 在浏览器开发者工具中检查控件结构,找到实际的输入框或展开按钮,以及下拉选项弹出后所在的 DOM 元素。
- 展开列表后,等待弹出列表出现,再定位并点击目标选项。选项列表不一定是
districtsList的子元素,需根据页面实际 DOM 确认定位范围。
下面的代码展示了操作顺序,定位器需要替换为页面中的实际元素:
var driver = _browserFixture.EdgeDriver;
var dropdown = modelAddInvoice.ReturnDistrictInvoiceAddDistrict();
new Actions(driver)
.MoveToElement(dropdown)
.Click()
.Perform();
// 等待 Kendo 弹出列表显示后,按实际 DOM 定位目标选项并点击。
// var option = driver.FindElement(By.XPath("实际的选项定位器"));
// option.Click();
关于鼠标滚动
问题中的键盘代码可以通过连续发送 ArrowDown 到达第 5 个选项,再用 ArrowUp 返回。这只能说明控件响应了键盘输入,不能证明鼠标滚轮事件的接收目标也是同一个控件。要模拟滚轮,应先确认列表已展开,再将滚动操作指向实际可滚动的弹出列表区域。由于没有 HTML 和 Selenium 版本信息,无法给出可靠的列表定位器或适用于该项目版本的滚轮代码。
备注:内容仅供参考。
