rochdev/tinto

View on GitHub
lib/browser.js

Summary

Maintainability
A
0 mins
Test Coverage
'use strict';

var Page = require('./page');
var Entity = require('./entity');
var Locator = require('./utils/locator');
var queue = require('./queue');
var evaluator = require('./utils/evaluator');
var inherits = require('./utils/inherits');
var find = require('./utils/find');
var tinto = {};

/**
 * @constructor
 * @extends tinto.Entity
 * @property {tinto.Attribute} title
 * @property {tinto.Attribute} url
 * @property {webdriver.WebDriver.Navigation} navigate
 */
tinto.Browser = function Browser() {
  Entity.call(this);

  this.property('url', function() {
    return evaluator.getDriver().getCurrentUrl();
  });

  this.property('title', function() {
    return find('title').first().getText();
  });

  this.getter('navigate', function() {
    return evaluator.getDriver().navigate();
  });
};

inherits(tinto.Browser, Entity);

/**
 * @returns {tinto.Page}
 */
tinto.Browser.prototype.getPage = function() {
  return new Page(new Locator('html', {index: 0}));
};

/**
 * @returns {webdriver.WebDriver}
 */
tinto.Browser.prototype.getDriver = function() {
  return evaluator.getDriver();
};

/**
 * @param {string} [url]
 */
tinto.Browser.prototype.open = function(url) {
  evaluator.open();

  if (url) {
    this.visit(url);
  }
};

/**
 * @param {string} url
 */
tinto.Browser.prototype.visit = function(url) {
  queue.push(function() {
    return evaluator.getDriver().get(url);
  });
};

/**
 * @param {boolean} [force]
 */
tinto.Browser.prototype.close = function(force) {
  if (force) {
    queue.clear();
    evaluator.close();
  } else {
    queue.push(function() {
      return evaluator.close();
    });
  }
};

module.exports = tinto.Browser;