Protractor如何测试select2

2023-12-10

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

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

当您尝试发送Keys 时,以下内容会出现有关无法聚焦元素的错误。


以下代码片段成功激活并选择 select2 小部件中的第一个选项,它允许通过网络加载选项。

与量角器 E2E 测试有关的“select2”小部件存在几个问题,此代码片段解决了这些问题。评论很好地解释了这一切。

/**
 * @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');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Protractor如何测试select2 的相关文章

随机推荐