一尘不染

如何使用C#使用Selenium WebDriver滚动到元素

selenium

如何使Selenium WebDriver滚动到特定元素以使其显示在屏幕上。我尝试了很多不同的选择,但是没有运气。这在c#绑定中不起作用吗?

我可以使它跳到特定的位置,((IJavaScriptExecutor)Driver).ExecuteScript("window.scrollTo(0, document.body.scrollHeight - 150)"); 但是我希望能够将其发送到不同的元素,而不必每次都给出确切的位置。

public IWebElement Example { get { return Driver.FindElement(By.Id("123456")); } }

例1)
((IJavaScriptExecutor)Driver).ExecuteScript("arguments[0].scrollIntoView(true);", Example);

例2)
((IJavaScriptExecutor)Driver).ExecuteScript("window.scrollBy(Example.Location.X", "Example.Location.Y - 100)");

当我观看它时,它不会将页面跳到该元素,并且异常与不在屏幕上的元素匹配。

更新:我添加了bool ex = Example.Exists();
之后,检查结果。它确实存在(正确)。其未显示(由于仍处于屏幕外,因为尚未移动到元素),因此未选择??????

有人看到By.ClassName成功。有谁知道在C#绑定中执行By.Id是否存在问题?


阅读 832

收藏
2020-06-26

共1个答案

一尘不染

它的问题不大,但我相信有比上面建议的更好的解决方案。

您应该使用Actions类来执行到元素的滚动。

var element = driver.FindElement(By.id("element-id"));
Actions actions = new Actions(driver);
actions.MoveToElement(element);
actions.Perform();
2020-06-26