量角器:向下滚动

时间:2014-05-09 18:44:13

标签: javascript selenium testing scroll protractor

我的页面上有一个按钮,当用户向下滚动时可以看到该按钮。因此,量角器测试给我一个错误:

  

UnknownError:未知错误:元素在点(94,188)处无法点击。

我尝试使用:

browser.executeScript('window.scrollTo(0,document.body.scrollHeight)');

当我在量角器elementexplorer.js中测试它时起作用,但在我的常规测试中它没有做任何事情。还有别的办法吗?

11 个答案:

答案 0 :(得分:51)

你需要等待承诺得到解决。以下示例来自open issue

browser.executeScript('window.scrollTo(0,0);').then(function () {
    page.saveButton.click();
})

<强>更新: 这是一个老问题(2014年5月),但仍然有一些访问者。 澄清一下:window.scrollTo(0, 0)滚动到当前页面的左上角。

如果您想滚动到页面的按钮,可以调用

window.scrollTo(0, document.body.scrollHeight)

@jsuser在this answer

中提到的

更现代的方法是使用

browser.actions().mouseMove(element).perform();

this answer

中赞助@MartinBlaustein

答案 1 :(得分:28)

我找到了一种更简单的方法。如果要滚动到元素,可以使用

    browser.actions().mouseMove(element).perform();

之后浏览器将聚焦该元素。

答案 2 :(得分:13)

我想补充上一个答案,希望能提供更多解释。

此代码,在调用&#39; executeScript&#39;:

'window.scrollTo(0,0);'
  • 向上滚动窗口,到窗口坐标0,0 ...基本上到最顶层
  • 如果您知道需要去的具体区域,只需更改坐标。

如果你知道你想要在窗口的最底层,这是我的目标。你可以把很多数字放在&#39; y&#39;坐标,就像我在这里做的那样:

browser.executeScript('window.scrollTo(0,10000);').then(function () {
    expect(<some control>.<some state>).toBe(<some outcome>);
})

答案 3 :(得分:9)

如果有其他人像我一样遇到麻烦:

我试图滚动到页面底部以在无限滚动方案中加载我的下一组数据。我尝试了window.scrollTo的不同变体以及参数[0] .click()但没有成功。

最后我意识到,为了让页面滚动,我必须通过点击窗口中的任何元素将焦点带到“窗口”。然后window.scrollTo(0,document.body.scrollHeight)工作就像一个魅力!

示例代码:

element(by.className('<any element on page>')).click();
browser.executeScript('window.scrollTo(0,document.body.scrollHeight)').then(function(){
//whatever you need to check for here
});

答案 4 :(得分:8)

我发现创建一个util帮助器并在页面对象(或测试文件本身)中使用它有帮助。这似乎对我有用:

utils.js

module.exports = {
  scrollIntoView: function(el) {
    browser.executeScript(function(el) {
      el.scrollIntoView();
    }, el.getWebElement());
  }
}
内部页面对象

...

var scrollIntoView = require('../utils').scrollIntoView;

module.exports = {
  clickBackBtn: function() {
    var el = element(by.buttonText('Go back'));
    scrollIntoView(el);
    el.click();
    return;
  }
}

在测试中......

it('should allow the user to go back to the profile page', function() {
  PageObject.clickBackBtn();
  expect(browser.getCurrentUrl()).toContain('/user/profile');
});

答案 5 :(得分:3)

这个问题的答案在顶部回复时标记正确。但升级后最新的chrome v54。以下代码可能是最佳解决方案。

browser.actions().mouseMove(element).perform();

答案 6 :(得分:2)

如果您只想导航到长页面的顶部或底部,则可以简单地使用“ HOME”键移至顶部,或使用“ END”键移至底部。

例如:

browser.actions().sendKeys(protractor.Key.HOME).perform();

browser.actions().sendKeys(protractor.Key.END).perform();

答案 7 :(得分:1)

使用

await browser.executeScript(`arguments[0].scrollIntoView({block: "center"});`, $element.getWebElement());

如果你想让元素滚动到窗口的中心

答案 8 :(得分:0)

其他方式,你可以试试这个:

InsertionSort

答案 9 :(得分:0)

最简单的方法是滚动到所需元素,然后单击它。请在当前量角器版本中使用以下经过测试和验证的代码。

it('scroll to element', function() {
           browser.driver.get('https://www.seleniumeasy.com/');
            var btnSubscribe= element(by.id('mc-embedded-subscribe'));
            browser.executeScript("arguments[0].scrollIntoView();", btnSubscribe);
             browser.sleep(7500);
             btnSubscribe.click();
          });

答案 10 :(得分:0)

我已经遵循了上面提到的所有方法,可以得出结论,有 3 件事是肯定有效的:

// if you want to move on top of the browser page
browser.actions().sendKeys(protractor.Key.HOME).perform();

// if you want to move on Bottom of the browser page
browser.actions().sendKeys(protractor.Key.END).perform();

如果滚动功能是在浏览器内实现的,而不是在整个页面上实现,那么请确保单击网格上要滚动的任意位置,然后使用上面的代码。

//Please for other methods to scroll can check "https://www.guru99.com/scroll-up-down-selenium-webdriver.html"
// Best way I would suggest is to use this way as here Element means the XPath 
let Element = element(by.xpath(optionid));
await browser.executeScript("arguments[0].scrollIntoView();", Element.getWebElement());