硒滚动元素进入(中心)视图

man*_*ngo 13 ruby watir-webdriver selenium-webdriver

当一个元素与selenium不在视图中并且试图与它进行交互时,selenium通常会隐式地将元素滚动到视图中.这很好,除了令人讨厌的是它通常将元素放入视图中.我的意思是,如果元素在窗口下方,它将向下滚动,直到元素刚好接近窗口边缘.

通常这很好,但是当在一个带有边框的网站上工作时,这将导致许多这类错误

Selenium::WebDriver::Error::UnknownError:
       unknown error: Element is not clickable at point (438, 747). Other element would receive the click: <body>...</body>
Run Code Online (Sandbox Code Playgroud)

因为网页的边框通常都在它上面,但无论如何都会尝试点击该元素.无论如何处理这个?也许在视线外时自动将元素移动到屏幕中心?我正在考虑通过红宝石修补猴子.

小智 22

这应该工作,以便将元素滚动到视图中心:

WebElement element = driver.findElement(By.xxx("xxxx"));

String scrollElementIntoMiddle = "var viewPortHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);"
                                            + "var elementTop = arguments[0].getBoundingClientRect().top;"
                                            + "window.scrollBy(0, elementTop-(viewPortHeight/2));";

((JavascriptExecutor) driver).executeScript(scrollElementIntoMiddle, element);
Run Code Online (Sandbox Code Playgroud)

  • 这对我避免页眉和页脚的一些问题特别有帮助,这些问题似乎覆盖了我试图移动到的元素。在 C# 中为我工作。 (2认同)