Why must I use browser.sleep while writing protractor tests
Since there is an ignoreSynchronization
turned on, you cannot use waitForAngular()
, which would be a solution in case of an angular-site testing.
A better solution here would be to set a page load timeout:
browser.manage().timeouts().pageLoadTimeout(10000); // 10 seconds
See also these relevant threads on explicit waits and timeouts:
- Use protractor to test login on non-AngularJS page (Leo's answer is very detailed)
- Protractor : How to wait for page complete after click a button?
- Timeouts
Armeen Moon
I am a generalist; slowly becoming a specialist in Web Development. I mix art, design, and technology, to create effective experiences that deliver value at scale. My professional goals are simple: surround myself with smart, energetic, creative people while working on solving problems that matter. Specialties: Functional and Object Oriented JavaScript ,Angular+, AngularJS, AWS, CSS/SCSS, Vector/DOM motion graphics, semantic HTML, NodeJS, Golang, and passionate about learning i18n/l10n, a11y, and modern web workflow.
Updated on June 11, 2020Comments
-
Armeen Moon almost 4 years
My first run at E2E tests. I'm trying to digest someone else's protractor tests.
Problem: There are a lot of
browser.driver.sleep
and this seems fragile.Goal: not to use
browser.driver.sleep
Question: What is a better approach to
browser.driver.sleep
? Something less fragile like a promise or something I dont know about lol?var config = require('../../protractor.conf.js').config; describe('this Homepage Body Tests', function(){ browser.driver.get(config.homepageUrl); it("should open find a clinic page", function(){ // page loads :: want to fix this random wait interval browser.driver.sleep(2000); browser.ignoreSynchronization = true; var string = 'clinic'; var main = '.search-large-text'; var link = element(by.cssContainingText('.submenu li a', string)); link.click().then(function() { // page reloads :: want to fix this random wait interval browser.driver.sleep(3000); var title = element(by.cssContainingText(main, string)); expect(title.getText()).toBe(string); }); }); });