Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法使用量角器滚动到下拉列表中的元素_Javascript_Selenium_Selenium Webdriver_Scroll_Protractor - Fatal编程技术网

Javascript 无法使用量角器滚动到下拉列表中的元素

Javascript 无法使用量角器滚动到下拉列表中的元素,javascript,selenium,selenium-webdriver,scroll,protractor,Javascript,Selenium,Selenium Webdriver,Scroll,Protractor,我试图从jq小部件的下拉列表中选择一个复选框。现在,当元素在视图中时,代码可以工作,但在其他情况下则不能。我知道我们需要滚动到元素,量角器才能找到它。我尝试在这里使用executeScript和scrollIntoView,但无法滚动到元素。我还尝试了其他一些东西。请帮我做这个 // conf.js exports.config = { directConnect: true, framework: 'jasmine', specs: ['jq.spec.js'],

我试图从jq小部件的下拉列表中选择一个复选框。现在,当元素在视图中时,代码可以工作,但在其他情况下则不能。我知道我们需要滚动到元素,量角器才能找到它。我尝试在这里使用executeScript和scrollIntoView,但无法滚动到元素。我还尝试了其他一些东西。请帮我做这个

// conf.js
exports.config = {
    directConnect: true,
    framework: 'jasmine',
    specs: ['jq.spec.js'],

    jasmineNodeOpts: {
        showColors: true,
        defaultTimeOutInterval: 30000000
    },
}
我的jq.spec.js:

describe('should check jq widgets', function() {

    it("should check the scrolling is proper",function() {
        browser.ignoreSynchronization = true;
        browser.get('http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxdropdownlist/checkboxes.htm?arctic');
        browser.wait(protractor.ExpectedConditions.visibilityOf($('#dropdownlistContentjqxWidget')),500000,'dropdown did not display');
        $('#dropdownlistContentjqxWidget').click().then(function(){
            $('#listitem0innerListBoxjqxWidget>div').click();
            scrollIntoView(element(by.xpath("//span[text()='Francisco Chang']/parent::div/div")));
            element(by.xpath("//span[text()='Francisco Chang']/parent::div/div")).click();
            browser.sleep(10000);
        });
    });
});

var scrollIntoView = function(element){
    browser.executeScript(function(element) {
        element.scrollIntoView();
        }, element.getWebElement());
    });

};
//错误:

Failures:
1) should check jq widgets should chech the scrolling is proper
  Message:
    Failed: No element found using locator: By(xpath, //span[text()='Francisco Chang']/parent::div/div)

我建议更改
滚动查看功能。jasmine的包装器将所有内容解析到控制流中,但由于它返回void,我非常确定这将开始执行
scrollIntoView
,并立即返回(在
browser.executeScript
添加到控制流之前。然后尝试单击元素而不将其滚动到视图中。此外,为了完整性,我添加了一个JSDoc:

/**
 * Scroll to find some element in the view
 * @param {ElementFinder} element the located element of interest
 * @returns {webdriver.promise.Promise} returns a webdriver promise
 */
var scrollIntoView = function(element){
    return browser.executeScript(function(element) {
        element.scrollIntoView();
        }, element.getWebElement());
    });
};

我刚才试过这个。它还是一样的。而且,我也看不到滚动的视觉效果。你为什么要关闭同步?你正在测试一个非角度的页面吗?是的,这是一个非角度的页面。然后你需要提供你自己的点击和选择之间的等待逻辑。我还认为,当忽略同步时,预期条件不起作用此选项设置为true。我现在将使用睡眠替换预期条件。我想我测试了单击并选择了使用。我将再次尝试。我仍然需要这方面的帮助。请帮助!