如何使Selenium WebDriver滚动到特定元素以使其显示在屏幕上。我尝试了很多不同的选择,但是没有运气。这在c#绑定中不起作用吗?
我可以使它跳到特定的位置,((IJavaScriptExecutor)Driver).ExecuteScript("window.scrollTo(0, document.body.scrollHeight - 150)"); 但是我希望能够将其发送到不同的元素,而不必每次都给出确切的位置。
((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);
((IJavaScriptExecutor)Driver).ExecuteScript("arguments[0].scrollIntoView(true);", Example);
例2) ((IJavaScriptExecutor)Driver).ExecuteScript("window.scrollBy(Example.Location.X", "Example.Location.Y - 100)");
((IJavaScriptExecutor)Driver).ExecuteScript("window.scrollBy(Example.Location.X", "Example.Location.Y - 100)");
当我观看它时,它不会将页面跳到该元素,并且异常与不在屏幕上的元素匹配。
更新:我添加了bool ex = Example.Exists(); 之后,检查结果。它确实存在(正确)。其未显示(由于仍处于屏幕外,因为尚未移动到元素),因此未选择??????
有人看到By.ClassName成功。有谁知道在C#绑定中执行By.Id是否存在问题?
它的问题不大,但我相信有比上面建议的更好的解决方案。
您应该使用Actions类来执行到元素的滚动。
var element = driver.FindElement(By.id("element-id")); Actions actions = new Actions(driver); actions.MoveToElement(element); actions.Perform();