如何使用webdriver-io在可滚动元素中滚动? 我尝试了以下代码:
client
.scroll('#hierarchy_p')
.scroll(20, 50);
或
client
.scroll('#hierarchy_p', 20, 50);
但它们都没有任何效果。
答案 0 :(得分:1)
通常,我不建议使用driver.executeScript
,但在webElement.setAttribute
之类的问题出现之前,我怀疑还有很多其他方法可以做到这一点。
用于向上和向下滚动可滚动元素:
function scrollToFn(driver, element, scrollAmount){
return elem.getAttribute('scrollTop').then(function(val){
scrollAmount += +val; // written as +val for string to number conversion
return driver.executeScript("arguments[0].scrollTop = arguments[1]", elem, scrollAmount);
});
}
用于滚动到可滚动元素内的特定元素:
function scrollToInnerFn(driver, parentEle, innerEle){
return innerEle.getAttribute('offsetTop').then(function(val){
return driver.executeScript("arguments[0].scrollTop = arguments[1]", parentEle, val);
});
}
注意:上述两个函数都将返回一个promise。
使用
...
var webdriver = require('selenium-webdriver');
var browser1 = new webdriver.Builder().usingServer().withCapabilities({
browserName: 'firefox'
}).build();
...
var elem = browser1.findElement(webdriver.By.css('#scrollT'));
var elem2 = browser1.findElement(webdriver.By.css('#mm'));
scrollToFn(browser1, elem, 200).then(function(){
scrollToInnerFn(browser1, elem, elem2);
}).then(...
答案 1 :(得分:0)
我知道这篇文章很老,但我遇到了同样的问题。 @mido给出的例子非常复杂,我很难理解它们,所以我找到了一种简单的方法。
我们必须使用 .execute() 命令:
browser.execute([function(){},param1,param2,....]);
您想在可滚动元素中向下滚动,因此我们假设您的容器是div
,其ID为id='scrollContent_body'
。现在你所要做的就是在剪下来的下面使用:
browser.execute(function() {
// browser context - you may not access client or console
// += 60 will scroll down
// -= 60 will scroll up
document.getElementById('scrollContent_body').scrollTop += 60;
});
注意:您的驱动程序browser
或client
天气并不重要。
答案 2 :(得分:0)
scrollTop
方法不适用于我的用例。这是有效的:
browser.execute(function() {
document.querySelector('#hierarchy_p').scrollIntoView();
});
这是使用Chrome中的webdriver.io v4.14.0测试。