2016-08-22 2 views
1

Ich lerne Winkelmesser und es scheint großartig. Aber ich würde gerne ein paar Spezifikationen auf einer einzigen Seite öffnen. Wie kann ich das erreichen? Mein Problem ist, dass eine Menge Dinge auf meiner Seite über Ajax geladen werden, einige durch Kaskaden.Winkelmesser - Browser öffnen, warten, Tests ausführen

Momentan verwende ich die Spezifikationen wait und beforeEach. Hier ist der Code:

const br = browser; 
const url = 'http://localhost:3000'; 

br.ignoreSynchronization = true; 


describe('Component',() => { 
    beforeEach(() => { br.get(url); }); 

    it ('should be present',() => { 
     expect(element(by.className('news-list__wrapper')).isPresent()).toBe(true); 
    }); 

    it ('should render children',() => { 
     br.wait(() => { 
      return element(by.className('news-block')).isPresent(); 
     }, 2500).then((r) => { if (r) { console.log('\n ✓ Component renders children') } }); 
    }); 

    it ('should render images',() => { 
     br.wait(() => { 
      return element.all(by.className('news-block__img')).first().isPresent(); 
     }, 2500).then((r) => { if (r) { console.log('\n ✓ Component renders images') } }); 
    }); 

    it ('should load images',() => { 
     br.wait(() => { 
      return element(by.className('news-block__image--loaded')).isPresent(); 
     }, 2500).then((r) => { if (r) { console.log('\n ✓ Component loads images') } }); 
    }) 
}) 

Was kann ich tun?

Antwort

1

Verwendung ExpectedConditions in browser.wait() für solche Ajax calls- , um weitere Informationen zu diesem Thema können Sie die API doc verweisen - http://www.protractortest.org/#/api?view=ProtractorExpectedConditions

const br = browser; 
const url = 'http://localhost:3000'; 
const EC = protractor.ExpectedConditions; 

br.ignoreSynchronization = true; 


describe('Component',() => { 
beforeEach(() => { br.get(url); }); 

it ('should be present',() => { 
    expect(element(by.className('news-list__wrapper')).isPresent()).toBe(true); 
}); 

it ('should render children',() => { 
    br.wait(EC.presenceOf(element(by.className('news-block'))), 2500).then((r) => { if (r) { console.log('\n ✓ Component renders children') } }); 
}); 

it ('should render images',() => { 
    br.wait(EC.presenceOf(element.all(by.className('news-block__img')).first()), 2500).then((r) => { if (r) { console.log('\n ✓ Component renders images') } }); 
}); 

it ('should load images',() => { 
    br.wait(EC.presenceOf(element(by.className('news-block__image--loaded'))), 2500).then((r) => { if (r) { console.log('\n ✓ Component loads images') } }); 
}) 
}) 
1

Set browser.ignoreSynchronization = false und verwenden browser.waitForAngular(), um Ihre Skripte zu machen warten alle Ajax-Aufruf zu erhalten Komplett. Die Stärke des Winkelmessers besteht darin, dass er auf alle asynchronen Aufrufe wartet, die von der Seite ausgeführt werden, und dann nur die nächste Codezeile ausführt.

Verwandte Themen