2014-04-06 23 views
5

Öğenin üzerine tıklayarak üzerine tıklayın, açılan kutuya göre değil. AngularJS + Açıölçer Metni temel alan Açılır seçenek nasıl seçilir?

i bu büyük yazı bulundu: https://coderwall.com/p/tjx5zg ama maç bulunmuştur sonra beklendiği gibi arama sonsuza kadar devam çalışmıyor ve öğeyi tıklatarak değil,

birisi daha iyi bir örnek varsa (bir tane çalışma) veya bu kodu düzeltebilir ve çalışmasını sağlayabilirsiniz,

Bunu yapacağım.

var browser = protractor.getInstance(); 
browser.selectOption = selectOption.bind(browser); 
browser.selectOption(protractor.By.id('my-dropdown'), 'My Value'); 
+0

Ben de denedim "protractor.By.xpath ('select seçenek [metin() = "2. Seçenek"]')) ;" ve –

+0

işe yaramadı Genellikle 'sendKeys()' kullanıyorum, bu istenen ya da değil emin değilim. Mesela bir şehir isimleri listesiyle açılırsam, 'elem.sendKeys (requiredCityName)' kullanırdım ve otomatik olarak doğru seçeneği seçer. – Aaron

cevap

12

Bu fonksiyon:

Bu

kullanılan görevinden kodu Dan Haller (kendisine tüm hakları saklıdır)

function selectOption(selector, item){ 
    var selectList, desiredOption; 

    selectList = this.findElement(selector); 
    selectList.click(); 

    selectList.findElements(protractor.By.tagName('option')) 
     .then(function findMatchingOption(options){ 
      options.some(function(option){ 
       option.getText().then(function doesOptionMatch(text){ 
        if (item === text){ 
         desiredOption = option; 
         return true; 
        } 
       }); 
      }); 
     }) 
     .then(function clickOption(){ 
      if (desiredOption){ 
       desiredOption.click(); 
      } 
     }); 
    } 

Bu Böyle kullanabilirsiniz seçkin madde fonksiyonudur olduğunu seçtiğiniz kutunun 3. seçeneğini seçer.

function selectDropdownByNumber(element, index, milliseconds) { 
    element.findElements(by.tagName('option')) 
     .then(function(options) { 
     options[index].click(); 
     }); 
    if (typeof milliseconds !== 'undefined') { 
     browser.sleep(milliseconds); 
    } 
} 
var mySelect = $('#my-dropdown'); 
selectDropdownByNumber(mySelect, 2); 

diğer bilgiler burada bulunabilir - http://qainsight.blogspot.fr/2014/04/select-dropdown-value-in-protractor-js.html

+0

harika bir çözüm! Teşekkürler!! –

+2

Bu, İletki sürümü ile ilgili olabilir, ancak benim için "findElements" yöntemi çalışmaz. Gerçi işi yapan "all" denilen bir yöntem var. – LeFex

20

Bu soru benzer: Madem iletki bir son sürümüne sahip olduğunuzdan olarak How to select option in drop down protractorjs e2e tests

, tıpkı senin yapabilirsiniz:

Eğer sayısına göre tıklamanız yeterli olacaktır
element(by.cssContainingText('option', 'BeaverBox Testing')).click(); 

, yapabileceğiniz:

Eğer değeriyle seçeneğini seçmek istediğiniz gibi 10
var selectDropdownbyNum = function (element, optionNum) { 
    if (optionNum){ 
    var options = element.findElements(by.tagName('option')) 
     .then(function(options){ 
     options[optionNum].click(); 
     }); 
    } 
}; 
+3

Bu yolu denedim. Ama elementi bulamadığını söylüyor. Görünmez – Russj

+1

'cssContainingText' benim için çalışıyor. bu doğru cevap. Ayrıca bkz http://stackoverflow.com/a/24259419/1068746 –

+0

Ben hala [nesne Nesne] 'findElements' bir yöntem var ben hala aldım çünkü ben açılır öğe alabilirsiniz alabilirsiniz doğru olsa bile düşünüyorum krom bağlanır ve bağımsız bir selenyum sunucusuna değil – btm1

4

, şunları kullanabilirsiniz:

var select = element.one(by.model('selectData')); 
select.$('[label="Option 1"]').click(); 
İlgili konular