2017-09-29 16 views
8

Próbuję zrobić prosty liczyć na moją testów modułowych e2e karuzelikątowa: kątomierz - count() nie powoduje rozwiązania i Timeout

carousel.po.ts

import { browser, element, by, Key } from 'protractor'; 

export class CarouselDemoPage { 
    navigateTo() { 
    return browser.get('/design/carousel'); 
    } 


    getCarouselComponent(index: number) { 
    return element.all(by.css('cfc-carousel')).get(index); 
    } 



    getCarouselIndicators(index: number) { 
    return this.getCarouselComponent(index).element(by.css('.indicators')).all(by.repeater('item in items')); 
    } 
} 

A mój plik spec:

import { CarouselDemoPage } from './carousel.po'; 


describe('Carousel component',() => { 
    let page: CarouselDemoPage; 

    beforeEach(() => { 
    page = new CarouselDemoPage(); 
    page.navigateTo(); 
    }); 

    it('At least one carousel component should exist',() => { 
    expect<any>(page.getCarouselComponent(0)).toBeDefined(); 
    }); 

    it('Check correct number of indicators displayed',() => { 
    expect<any>(page.getCarouselIndicators(0).count()).toEqual(4); 
    }); 
}); 

mam wszystkie najnowsze lub bliskie najnowszym przynajmniej pakiety

"@ kątową/core": "^ 5.0.0-beta.7", "jaśmin-core": "~ 2.8.0", "kątomierz": "~ 5.1.2"

Pierwszy test działa poprawnie, otrzymując limit czasu na drugi

1) Składnik karuzeli Sprawdź poprawną liczbę wyświetlanych wskaźników - Błąd: Przekroczono limit czasu oczekiwania na asynchroniczne zadania kątowe do zakończenia po 20 sekundach. Może to być spowodowane tym, że bieżąca strona nie jest aplikacją Angular. Proszę zapoznać się z nas po więcej szczegółów: https://github.com/angular/protractor/blob/master/docs/timeouts.md#waiting-for-angular

Czekając na elemencie z lokalizatorem - lokator: Przez (selektor CSS, CFC-custom-select)

Zastrzeżenie mam setTimeout w ngAfterViewInit() tutaj:

ngAfterViewInit() { 
    // Needs the timeout to avoid the "expression has changed" bug 
    setTimeout(() => { 
     this.items = this.viewItems.toArray().concat(this.contentItems.toArray()); 
     this.totalItems = this.items.length; 
     this._first = this.items[0]; 
     this._last = this.items[this.totalItems - 1]; 

     this._setItemsOrder(this.currentFrame); 
     this._setInterval(); 
    }, 0); 
    } 

Zatem próbowałem

browser.ignoreSynchronization = true; 

i

browser.driver.sleep(50); 

i

browser.waitForAngular(); 

ale potem się hrabia być 0

Więc po pewnym debugowania Pomyślałem, że setInterval w moich elementów karuzeli przerywa test

powinienem użyć browser.ignoreSynchronization = true; ??

Wszelkie pomysły?

+0

Czy jakakolwiek część aplikacji internetowej jest kanciasta? – demouser123

+0

nie jest tak oczywiste? @ demouser123 –

+0

Dlaczego miałoby to być "oczywiste"?Nie widzę, aby wspominałeś o tym wyraźnie w treści pytania. – demouser123

Odpowiedz

4

Tak, z powodu setInterval i innych funkcjonalności Timeout w składniku karuzeli, musiałem dodać

browser.ignoreSynchronization = true; 

i nieco zmodyfikowany moi getCarouselIndicators funkcję być:

getCarouselIndicators(index: number) { 
    browser.ignoreSynchronization = true; 
    return this.getCarouselComponent(index).all(by.css('.indicators li')); 
} 

Teraz test rozwiązuje się i działa idealnie!

Powiązane problemy