量角器:我如何在Protractor中正确使用过滤?

时间:2015-07-13 08:54:35

标签: angularjs testing filtering protractor cycle

我尝试用量角器开始测试,现在我遇到了一个问题,我无法解决。

我有这个测试:

 describe('Test_3', function() {
    var my_url = 'http://wks-15103:8010/ps/ng-components/examples/ps-checkbox.html'
    var main_checkbox = element(by.xpath("//div[@ng-model='My_Group']/div[1]/span/span[1]"));
    var checkbox_list = element.all(by.xpath("//div[@ng-model='My_Group']/div[2]/div/span/span[1]")); 
    var title_checkbox_list = element.all(by.xpath("//div[@ng-model='My_Group']/div[2]/div/span"));   
    var disabled_pri = 'n-check-checkbox';
    var enabled_pri = 'n-check-checkbox n-check-checkbox_checked';


    beforeEach(function() {
        browser.get(my_url);
    });

    it('schould be chosen',function(){
        main_checkbox.click(); 

        checkbox_list.filter(function(elem, index) {
            return elem.getAttribute('class').then(function(text) {
                return text != 'n-check-checkbox n-check-checkbox_disabled' & text!='n-check-checkbox n-check-checkbox_disabled n-check-checkbox_checked';
            });
        }).then(function(filteredElements) {
            filteredElements.each(function(element, index) {
                expect(element.getAttribute('class')).toEqual(disabled_pri); 
            });
        });
    });
}); 

它不起作用。 但后来我尝试使用不带循环的过滤.each它工作正常。

 describe('Test_3', function() {
    var my_url = 'http://wks-15103:8010/ps/ng-components/examples/ps-checkbox.html'
    var main_checkbox = element(by.xpath("//div[@ng-model='My_Group']/div[1]/span/span[1]"));
    var checkbox_list = element.all(by.xpath("//div[@ng-model='My_Group']/div[2]/div/span/span[1]"));  //это список самих чекбоксов
    var title_checkbox_list = element.all(by.xpath("//div[@ng-model='My_Group']/div[2]/div/span"));  //это список чекбоксов с названиями  
    var disabled_pri = 'n-check-checkbox';
    var enabled_pri = 'n-check-checkbox n-check-checkbox_checked';

    beforeEach(function() {
        browser.get(my_url);
    });

    it('schould be chosen',function(){
        main_checkbox.click();     //Убрали флажок с группового чекбокса   

        checkbox_list.filter(function(elem, index) {
        return elem.getAttribute('class').then(function(text) {
            return text != 'n-check-checkbox n-check-checkbox_disabled' & text!='n-check-checkbox n-check-checkbox_disabled n-check-checkbox_checked';
        });
        }).then(function(filteredElements) {
            filteredElements[0].click();
            filteredElements[0].click();
            expect(filteredElements[0].getAttribute('class')).toEqual(disabled_pri);
        }); 
    }); 
}); 

我的错误是什么?

1 个答案:

答案 0 :(得分:5)

docs for filter中所述,它返回ElementArrayFinder的实例。当您在then的实例上调用ElementArrayFinder方法时,它会解析为ElementFinder的数组,因此在then的回调中,您会收到一个纯JavaScript数组{ {1}}秒。要迭代它,您可以使用本机JavaScrupt forEach

ElementFinder

否则,checkbox_list.filter(function(elem, index) { // ... }) .then(function(filteredElements) { filteredElements.forEach(function(element, index) { // .... }); }); 拥有自己的方法ElementArrayFinder,您应该在each的结果上调用它,而不是在filter的回调中调用它:

then

也许the source code for ElementArrayFinder也可以帮到你。