Selenium c# OpenQA.Selenium.ElementNotInteractableException:元素<input id="PhoneNumber"

问题描述 投票:0回答:1

WebDriver 似乎无法滚动到 FireFox 中的元素视图。

我正在尝试查找元素,清除文本框并将按键发送到文本字段。这在 Chrome 和 Edge 上运行良好,只是在 FireFox 上我遇到了这个问题。

无论我尝试什么,FireFox 都会失败并告诉我它无法滚动到元素的视图中

目前我正在搜索元素,清除字段并发送密钥:

这是用 C# 编写的

search.IdPhoneNumberField.Clear();
search.IdPhoneNumberField.SendKeys("21542585");

这向我抛出一个错误,说这不在视图中。我尝试过以下方法:

WebDriverWait wait = new WebDriverWait(driver, new TimeSpan(0, 0, 30));
wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("PhoneNumber")));
driver.FindElement(By.Id("PhoneNumber")).Clear();
driver.FindElement(By.Id("PhoneNumber")).SendKeys("21542585");
WebDriverWait whateverspace = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
whateverspace.Until(drv => drv.FindElement(By.Id("PhoneNumber")));
var wait = new WebDriverWait(driver, new TimeSpan(0, 0, 30));
var element = wait.Until(ExpectedConditions.ElementIsVisible(By.Id("PhoneNumber")));

element.Clear();
element.SendKeys("21542585");
Actions act = new Actions(driver);
act.MoveToElement(search.IdPhoneNumberField).SendKeys("21542585").Perform();

无论我尝试什么,当我手动添加 JavaScript 滚动时,FireFox 都会不断通知我该元素不在视图中滚动到事件,它会向下滚动到我可以看到该元素的位置,但 FireFox 拒绝找到它。

var elem = driver.FindElement(By.Id("PhoneNumber"));
driver.ExecuteJavaScript("arguments[0].scrollIntoView(true);", elem);

请问有人可以帮忙吗?

c# selenium-webdriver firefox automation webdriver
1个回答
0
投票

我之前曾遇到过 Firefox 和 Selenium 浏览器特定的怪癖,并且更具体地遇到过类似的滚动问题。

我们使用的解决方法之一是您已经提到的 jsscrollIntoView,但这并不总是有效。我们最终添加了一个 js mouseover 组件,如下所示:

document.addEventListener('customScroll', e => {
document.documentElement.scrollTop = e.target.offsetTop;
});

let scrollTo = document.getElementById('elementID');
if (scrollTo) {
scrollTo.dispatchEvent(new Event('customScroll', { bubbles: true, cancelable: true }));
}

我希望上述内容的一些变化能有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.