2

我必须检查一个元素是否在视图中,如果没有,则只有使用以下操作将其滚动到视图中,然后与之交互 -

((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", element);

如果元素在视图中,请不要执行上述命令。检查一个元素是否在视图中isDisplayed()是没有帮助的,因为无论元素是否在视图中,它都会返回 true。

您能否建议如何检查某个元素是否在视图中?

4

1 回答 1

1

要与元素交互,该元素需要位于Viewport中。如果元素不在视口中,则必须执行scroll()以下操作:

((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", element);

您可以在不同滚动选项之间的区别是什么中找到关于不同滚动选项的详细讨论?


此时值得一提的是,以下方法:

将在执行之前自动滚动视口中的元素。

您可以在Selenium python Error: element could not be scrolled into view中找到详细讨论


最后,在极少数情况下,如果HTML DOM包含AngularReact元素,您甚至可能必须在尝试滚动之前诱导WebDriverWaitvisibilityOfElementLocated()如下所示:

((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("button.nsg-button"))));
于 2019-12-13T08:22:48.777 回答