最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Why must I use browser.sleep while writing protractor tests - Stack Overflow

programmeradmin1浏览0评论

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);
  });
});
});

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);
  });
});
});
Share Improve this question edited Jun 10, 2016 at 13:56 Kristof Mols 3,5572 gold badges40 silver badges51 bronze badges asked Dec 2, 2014 at 2:08 John AbrahamJohn Abraham 18.8k36 gold badges132 silver badges240 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 12

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
发布评论

评论列表(0)

  1. 暂无评论