2014-10-22 94 views
2

我有一個select2下拉列表,您需要先輸入2個字符,然後選擇您的項目。我無法用量角器來測試。量角器如何測試select2

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

下面的錯誤提示您在嘗試發送密鑰時無法聚焦元素。

回答

8

以下片段成功激活並選擇了select2小部件中的第一個選項,它允許通過網絡加載選項。

'select2'小部件存在幾個問題 - 關於量角器E2E測試 - 這個片段涉及。評論解釋得很好。

/** 
* @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'); 
+0

感謝,將測試時,我得到一個機會 – 2014-11-06 10:44:24

+1

爲我工作。謝謝!注意自己:不要再使用角度的應用程序select2 :) – inolasco 2015-04-21 16:07:19

+0

我得到'UnknownError:未知的錯誤:不能使用此解決方案聚焦元素'。 – user2388556 2015-05-07 23:43:02