【发布时间】:2015-04-12 23:12:09
【问题描述】:
如何让 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 是否有问题?
【问题讨论】:
-
也许您可以尝试模拟“向下箭头”按键,直到异常消失。我知道这是在墙倒塌之前一直在撞墙,但如果你只是想让它以某种方式工作,它可能是一个解决方案?!
-
您可以尝试一件事,使用 ExpectedConditions.visibilityOfElement 方法并将其作为 while 循环的条件,并在循环中将视图滚动 100、100 个坐标。
-
在调用 javascript 之前,您确定 WebDriver 已找到您的元素吗?
-
webelement 已经声明(Driver.FindElement)。我原以为它会找到它,因为它可以在页面顶部找到所有其他元素,并且在到达该元素之前有几个等待。我会测试并再次更新。我想滚动直到找到元素,因为 Selenium Webdriver 不允许您对屏幕外的元素执行任何操作。我希望避免任何涉及仅跳跃固定数量的解决方案,因为页面大小会有所不同。
-
driver.FineElement(By.Id('id-of-ele')).Click()不会成功吗?
标签: c# selenium selenium-webdriver selenium-chromedriver