12

我尝试了几种向表格添加滚动的方法,但其中只有一种可以正常工作。他们之间有什么不同?

第一的:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].scrollIntoView();", Element);

第二:

WebElement element1 = driver.findElement(By.id("scrolled_element"));
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element1);

第三:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.scrollBy(0,1000)");

第四:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");
4

2 回答 2

14

Element.scrollIntoView()

Element.scrollIntoView()方法将调用它的元素滚动到浏览器窗口的视口中。

  • 句法:

    • element.scrollIntoView()
    • element.scrollIntoView(alignToTop)// 布尔参数
    • element.scrollIntoView(scrollIntoViewOptions)// 对象参数
  • 您的用例:

    • executeScript("arguments[0].scrollIntoView();", Element):这行代码会将元素滚动到浏览器窗口的可见区域。
    • executeScript("arguments[0].scrollIntoView(true);", element1):这行代码将滚动元素以对齐到可滚动祖先的Viewport的顶部。此选项对应于scrollIntoViewOptions: {block: "start", inline: "nearest"}。基本上,这是默认值。
    • executeScript("arguments[0].scrollIntoView(false)", element1);:这行代码将滚动要对齐到可滚动祖先的Viewport底部的元素。此选项对应于scrollIntoViewOptions: {block: "end", inline: "nearest"}

Window.scrollBy()

window.scrollBy()方法将当前窗口中的文档滚动给定的量。

  • 句法:

    • window.scrollBy(x-coord, y-coord)
    • window.scrollBy(options)
  • 参数:

    • x-coord是您要滚动的水平像素值。
    • y-coord是要滚动的垂直像素值。
    • options是一ScrollToOptions本字典。
  • 您的用例:

    • executeScript("window.scrollBy(0,1000)"):这行代码会将窗口中的文档向下滚动您要滚动的水平像素和垂直像素01000

Window.scrollTo()

Window.scrollTo()方法滚动到文档中的一组特定坐标。

  • 句法:

    • window.scrollTo(x-coord, y-coord)
    • window.scrollTo(options)
  • 参数:

    • x-coord是要显示在左上角的文档水平轴上的像素。
    • y-coord是要显示在左上角的文档垂直轴上的像素。
    • options是一ScrollToOptions本字典。
  • 您的用例:

    • executeScript("window.scrollTo(0, document.body.scrollHeight)"):这行代码会将窗口中的文档向下滚动页面bottom的。
于 2019-02-14T11:27:48.603 回答
0

我会将相关文档放在每个示例的下方,以便您自己参考,并给出一些我非常谦虚的意见:


.scrollIntoView() 与 .scrollIntoView(true)

https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView

应该没有区别,因为文档指出默认情况下,.scrollIntoView()实际上有一个默认值true.


.scrollBy()

https://www.w3schools.com/jsref/met_win_scrollby.asp

按指示的像素滚动文档。这意味着如果您的左上视口位于(10,10).scrollby(5,6)则表示视口在移动后将位于 的像素坐标处(15,16)


.scrollTo()

https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollTo

执行它的建议 - 即滚动您提供的坐标。这与滚动不同即上面的示例)。这意味着.scrollTo(1,1)将滚动文档,以便您的左上角视口现在位于 的像素坐标处(1,1),而不管它之前是什么。


对于您的总滚动选项是什么的单独问题 - 好吧,还有window.scroll(),但根据下面的 SO 文章,应该没有任何区别scrollTo()

JavaScript window.scroll 与 window.scrollTo?

于 2019-02-14T10:04:36.587 回答