如何使用 webdriver-io 在可滚动元素内滚动?我尝试了以下代码:
client
.scroll('#hierarchy_p')
.scroll(20, 50);
或者
client
.scroll('#hierarchy_p', 20, 50);
但它们都没有任何效果。
如何使用 webdriver-io 在可滚动元素内滚动?我尝试了以下代码:
client
.scroll('#hierarchy_p')
.scroll(20, 50);
或者
client
.scroll('#hierarchy_p', 20, 50);
但它们都没有任何效果。
通常,我不会建议使用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);
});
}
注意:上述两个函数都将返回一个承诺。
用法
...
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(...
该scrollTop
方法不适用于我的用例。这是有效的:
browser.execute(function() {
document.querySelector('#hierarchy_p').scrollIntoView();
});
这是在 Chrome 中使用 webdriver.io v4.14.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
。