【问题标题】:Protractor how to test select2量角器如何测试select2
【发布时间】:2014-10-22 09:44:02
【问题描述】:

我有一个 select2 下拉菜单,您需要先输入 2 个字符,然后选择您的项目。我无法用 Protractor 对此进行测试。

var select2 = element(by.css('div#s2id_person'));
select2.click();
select2.sendKeys('ip');
select2.sendKeys(protractor.Key.ENTER);

当您尝试 sendKeys 时,出现以下错误:无法聚焦元素。

【问题讨论】:

    标签: angularjs protractor ui-select2


    【解决方案1】:

    以下 sn-p 成功激活并选择了 select2 小部件中的第一个选项,它允许通过网络加载选项。

    “select2”小部件存在几个问题 - 关于量角器 E2E 测试 - 此 sn-p 解决了这些问题。 cmets 很好地解释了这一切。

    /**
     * @param {string} select2Locator // CSS selector of select2 container
     * @param {string} opt_query // an optional Query string
     */
    function select2First(select2Locator, opt_query){
        // the 'a' element inside the select2 will receive the 'mousedown' event
        var selector = select2Locator + ' a.select2-choice';
        // Locator for the select2 options
        var options = element.all(by.css('.select2-results-dept-0'));
    
        // select2 doesn't activate on click 
        // and protractor doesn't have a direct mousedown method on 'ElementFinder'.
        browser.driver.executeScript('$(arguments["0"]).mousedown();', (selector));
    
        if(opt_query){
            browser.driver.switchTo().activeElement().sendKeys(opt_query);
            // select2 can fetch options from over a network
            // so we confirm that all pending network requests are resolved after typing the query
            browser.driver.wait(function(){
                return browser.driver.executeScript('return $.active === 0;');
            }, 2000);
        }
    
        // makes sure all the options are rendered
        browser.driver.wait(function(){
            return options.count().then(function(count){
                return 0 < count;
            });
        }, 2000);
    
        options.first().click();
    };
    

    在您提供的场景中,您可以这样使用它:

    select2First('div#s2id_person', 'ip');
    

    【讨论】:

    • 谢谢,有机会会测试
    • 为我工作。谢谢!自我注意:永远不要再在角度应用程序上使用 select2 :)
    • 我收到了UnknownError: unknown error: cannot focus element 这个解决方案。
    • 这条神奇的线(来自上面的代码)在我的情况下使一切正常:browser.driver.switchTo().activeElement().sendKeys('the text'); — 这就是我所需要的(在我的情况下)。
    猜你喜欢
    • 2015-07-25
    • 1970-01-01
    • 2013-12-06
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    相关资源
    最近更新 更多