我的页面上有一个按钮,当用户向下滚动时可以看到该按钮。因此,量角器测试给我一个错误:
UnknownError:未知错误:元素在点(94,188)处无法点击。
我尝试使用:
browser.executeScript('window.scrollTo(0,document.body.scrollHeight)');
当我在量角器elementexplorer.js中测试它时起作用,但在我的常规测试中它没有做任何事情。还有别的办法吗?
答案 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)
更现代的方法是使用
browser.actions().mouseMove(element).perform();
答案 1 :(得分:28)
我找到了一种更简单的方法。如果要滚动到元素,可以使用
browser.actions().mouseMove(element).perform();
之后浏览器将聚焦该元素。
答案 2 :(得分:13)
我想补充上一个答案,希望能提供更多解释。
此代码,在调用&#39; executeScript&#39;:
中'window.scrollTo(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帮助器并在页面对象(或测试文件本身)中使用它有帮助。这似乎对我有用:
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());