【发布时间】:2020-05-17 08:59:27
【问题描述】:
在 java 中使用 selenium,我需要测试一个“返回顶部”按钮,所以我所做的是向下滚动页面直到显示“返回顶部”按钮(当滚动 25% 页面时显示) 并单击它,此按钮将用户带到页面顶部,现在我需要检查它是否有效,可见部分是页面顶部。如何使用 java 做到这一点?
【问题讨论】:
在 java 中使用 selenium,我需要测试一个“返回顶部”按钮,所以我所做的是向下滚动页面直到显示“返回顶部”按钮(当滚动 25% 页面时显示) 并单击它,此按钮将用户带到页面顶部,现在我需要检查它是否有效,可见部分是页面顶部。如何使用 java 做到这一点?
【问题讨论】:
一般原则是在浏览器中查看window.pageYOffset的值。如果您的按钮完全滚动回顶部,则 window.pageYOffset 的值应该为 0。假设 driver 变量包含您的 WebDriver 实例:
JavascriptExecutor executor = (JavascriptExecutor) driver;
Long value = (Long) executor.executeScript("return window.pageYOffset;");
然后您可以检查 value 是否为 0。executeScript 用于在浏览器中运行 JavaScript 代码。
这个答案最初提到scrollY,但在 IE 上不支持它。 MDN page on it 说:
为了跨浏览器兼容性,请使用
window.pageYOffset而不是window.scrollY。此外,旧版本的 Internet Explorer (var supportPageOffset = window.pageXOffset !== undefined; var isCSS1Compat = ((document.compatMode || "") === "CSS1Compat"); var x = supportPageOffset ? window.pageXOffset : isCSS1Compat ? document.documentElement.scrollLeft : document.body.scrollLeft; var y = supportPageOffset ? window.pageYOffset : isCSS1Compat ? document.documentElement.scrollTop : document.body.scrollTop;
感谢R. Oosterholt 的“提醒”。
【讨论】:
Louis 的回答有效,但不完全跨浏览器兼容,因为 Internet Explorer 不支持 window.scrollY。我建议改用 window.pageYOffset - 这会返回相同的值但跨浏览器兼容。
来源:https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollY
这是上面的代码块,修改后的代码:
JavascriptExecutor executor = (JavascriptExecutor) driver;
Long value = (Long) executor.executeScript("return window.pageYOffset;");
另外,Ruby 的语法(我当前位置使用的,假设驱动程序实例可以通过变量名“驱动程序”访问):
driver.execute_script('return window.pageYOffset;')
【讨论】:
如果需要,找到滚动到指定div的位置,使用这段代码:
JavascriptExecutor executor = (JavascriptExecutor) driver;
Long value = (Long) executor.executeScript("return document.getElementById('container').scrollTop;");
【讨论】: