我有一个网页,在点击按钮时会发生页面内滚动到下一节。有人能提供如何捕获该滚动的建议吗?代码位于锚点标签内,href指向#以滚动到页面中的下一个部分。我不确定如何验证是否实际起作用了滚动?
我有一个网页,在点击按钮时会发生页面内滚动到下一节。有人能提供如何捕获该滚动的建议吗?代码位于锚点标签内,href指向#以滚动到页面中的下一个部分。我不确定如何验证是否实际起作用了滚动?
您可以通过使用getBoundingClientRect()
相对于视口的位置来检查锚是否滚动到窗口顶部:
browser.get('https://www.w3.org/TR/webdriver');
$("[href='#capabilities']").click();
// assert that the position of the anchor relative to the top border of the window is less than 16 pixels.
var anchor = $('#h-capabilities');
var isCloseToTop = browser.executeScript(e => !(e.getBoundingClientRect().top >> 4), anchor);
expect(isCloseToTop).toBeTruthy();
browser.get('https://www.w3.org/TR/webdriver');
$("[href='#informative-references']").click();
expect(isScrolledTop($('#h-informative-references'))).toBeTruthy();
function isScrolledTop(element) {
return browser.executeScript(function(elem) {
var doc = elem.ownerDocument,
viewHeight = doc.defaultView.innerHeight,
docBottom = doc.documentElement.getBoundingClientRect().bottom,
box = elem.getBoundingClientRect();
return box.top > -1 && (box.top < 25 || (docBottom - viewHeight) < 25);
}, element);
}
the current URL to point to the correct #
section:
expect(browser.getCurrentUrl()).toEqual("https://url.com/mypage#myparagraph");
check the scrollTop
position of the body
element (assuming it is what is scrolled - or the other scrollable container):
var body = $("body");
expect(body.getCssValue("scrollTop")).toEqual("someValue"); // or apply the "greater than" check
solution based on your suggestion to use window.pageYOffset
- compare the value before and after the click:
browser.executeScript('return window.pageYOffset;').then(function (offsetBefore) {
offsetBefore = parseInt(offsetBefore);
button.click();
browser.executeScript('return window.pageYOffset;').then(function (offsetAfter) {
offsetAfter = parseInt(offsetAfter);
expect(offsetAfter).toBeGreaterThan(offsetBefore);
});
});
var body = $("body"); var scrollposition = body.getCssValue("scrollTop"); console.log(scrollposition);
.ElementFinder { browser_: ProtractorBrbrowser.executeScript('return window.pageYOffset;').then(function(pos) { expect(pos).toBe(829)});
如果有更好的解决方案,请告诉我。 - NewWorldpageYOffset
的值并比较这些值。希望能有所帮助。 - alecxepageYOffset
再进行操作是行不通的。驱动程序会在单击链接之前将其滚动到视图中。因此,即使单击失败无法跳转到引用,pageYOffset
也会增加。 - Florent B.