"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});

var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

var Page = function () {
  function Page() {
    _classCallCheck(this, Page);
  }

  _createClass(Page, [{
    key: "becomesVisible",
    value: function becomesVisible() {
      var _this = this;

      try {
        browser.waitUntil(function () {
          return _this.isVisible();
        });
      } catch (error) {
        return false;
      }

      return true;
    }
  }, {
    key: "isVisible",
    value: function isVisible() {
      if (Array.isArray(this.selector)) {
        var element = this.selector.reduce(function (result, selector) {
          return result ? result.$(selector) : null;
        }, browser);

        return element ? element.isVisible() : false;
      }

      return browser.isVisible(this.selector);
    }
  }, {
    key: "open",
    value: function open() {
      browser.url(this.url);

      return this.becomesVisible();
    }
  }]);

  return Page;
}();

exports.default = Page;