使用webdriver-io在可滚动元素中滚动?

时间:2015-04-01 07:30:19

标签: javascript node.js selenium-webdriver webdriver webdriver-io

如何使用webdriver-io在可滚动元素中滚动? 我尝试了以下代码:

client
.scroll('#hierarchy_p')
.scroll(20, 50);

client
.scroll('#hierarchy_p', 20, 50);

但它们都没有任何效果。

3 个答案:

答案 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;
});

注意:您的驱动程序browserclient天气并不重要。

答案 2 :(得分:0)

scrollTop方法不适用于我的用例。这是有效的:

browser.execute(function() {
    document.querySelector('#hierarchy_p').scrollIntoView();
});

这是使用Chrome中的webdriver.io v4.14.0测试。