PageRenderTime 95ms CodeModel.GetById 30ms RepoModel.GetById 1ms app.codeStats 0ms

/model/user.js

https://gitlab.com/vectorci/e2e-ui-example
JavaScript | 154 lines | 139 code | 15 blank | 0 comment | 14 complexity | 4018adab2c9386053410789a40fc26e0 MD5 | raw file
  1. var helper = require('./../module/helper.js');
  2. var github = require('./../providers/github.js');
  3. var bitbucket = require('../providers/bitbucket.js');
  4. var cst = require('./../module/utils.js');
  5. var constant = new cst.Constant();
  6. var self;
  7. var User = function (user, screenshots) {
  8. this.type = user.type;
  9. this.username = process.env[user.username];
  10. this.password = process.env[user.password];
  11. this.screenshots = screenshots;
  12. self = this;
  13. };
  14. User.prototype.login2 = function (callback) {
  15. self = this;
  16. browser.wait(function() {
  17. return browser.driver.isElementPresent(by.xpath(constant.XPATH_LOGIN));
  18. }, constant.DEFAULT_TIMEOUT).then(
  19. function () {
  20. var btnLogin = helper.findElement(by.xpath(constant.XPATH_LOGIN));
  21. btnLogin.click().then(function () {
  22. console.log('Click on the button Login');
  23. });
  24. signIn({
  25. 'github':{'xpath': constant.XPATH_GITHUB_SIGNIN},
  26. 'bitbucket':{'xpath': constant.XPATH_BITBUCKET_SIGNIN}
  27. }, callback);
  28. }, function() {
  29. browser.driver.isElementPresent(by.xpath(constant.XPATH_GITHUB_SIGNUP)).then(function (present) {
  30. console.log('isExist:' + present);
  31. if(present) {
  32. signIn({
  33. 'github':{'xpath': constant.XPATH_GITHUB_SIGNUP},
  34. 'bitbucket':{'xpath': constant.XPATH_BITBUCKET_SIGNUP}
  35. }, callback);
  36. } else {
  37. loggedIn(callback);
  38. }
  39. });
  40. });
  41. };
  42. var getXpathByProviderName = function (jsonData, provider) {
  43. if(provider == 'github') {
  44. return jsonData.github.xpath;
  45. } else if(provider == 'bitbucket') {
  46. return jsonData.bitbucket.xpath;
  47. }
  48. return 'invalid_xpath';
  49. };
  50. var signIn = function (jsonData, callback) {
  51. var xpath = getXpathByProviderName(jsonData, self.type);
  52. browser.wait(function() {
  53. return browser.driver.isElementPresent(by.xpath(xpath));
  54. }, constant.DEFAULT_TIMEOUT).then(
  55. function () {
  56. var btnSignIn = helper.findElement(by.xpath(xpath));
  57. btnSignIn.click();
  58. if(self.type == 'github') {
  59. github.signIn(self, self.screenshots, function () {
  60. browser.driver.wait(function () {
  61. return browser.driver.isElementPresent(by.xpath(constant.XPATH_USER_DROPDOWN));
  62. }, constant.DEFAULT_TIMEOUT).then(
  63. function () {
  64. callback();
  65. },
  66. function () {
  67. callback();
  68. }
  69. );
  70. });
  71. } else if(self.type == 'bitbucket') {
  72. console.log('bitbucket login');
  73. bitbucket.signIn(self, self.screenshots, function () {
  74. browser.driver.wait(function () {
  75. return browser.driver.isElementPresent(by.xpath(constant.XPATH_USER_DROPDOWN));
  76. }, constant.DEFAULT_TIMEOUT).then(
  77. function () { callback(); },
  78. function () { callback(); }
  79. );
  80. });
  81. }
  82. }, function () {
  83. loggedIn(callback);
  84. });
  85. };
  86. User.prototype.login = function(callback) {
  87. self = this;
  88. browser.driver.wait(function() {
  89. return !browser.driver.isElementPresent(by.xpath(constant.XPATH_LOGIN));
  90. }, 3000).then(
  91. function () {
  92. loggedIn(callback);
  93. },
  94. function() {
  95. var btnLogin = helper.findElement(by.xpath(constant.XPATH_LOGIN));
  96. btnLogin.click().then(function () {
  97. console.log('Click on the button Login ');
  98. });
  99. browser.wait(function() {
  100. return browser.driver.isElementPresent(by.xpath(constant.XPATH_GITHUB_SIGNIN));
  101. }, constant.DEFAULT_TIMEOUT).then(
  102. function () {
  103. var btnGithubSignIn = helper.findElement(by.xpath(constant.XPATH_GITHUB_SIGNIN));
  104. btnGithubSignIn.click();
  105. github.signIn(self, self.screenshots, function () {
  106. helper.waitForHandleElement(by.xpath(constant.XPATH_USER_DROPDOWN), 10000, function () {
  107. callback();
  108. }, function () { });
  109. });
  110. }, function () {
  111. loggedIn(callback);
  112. });
  113. });
  114. };
  115. var loggedIn = function (callback) {
  116. var formatStr = helper.format(constant.XPATH_USER_DROPDOWN_TEXT, self.username);
  117. browser.driver.isElementPresent(by.xpath(formatStr)).then(function (present) {
  118. console.log('logged');
  119. if(!present) {
  120. self.logout();
  121. self.login(callback);
  122. } else callback();
  123. });
  124. };
  125. User.prototype.logout = function () {
  126. browser.driver.isElementPresent(by.xpath(constant.XPATH_USER_DROPDOWN)).then(function (present) {
  127. console.log('Logout from account');
  128. var user_dropdown = helper.findElement(by.xpath(constant.XPATH_USER_DROPDOWN));
  129. user_dropdown.click();
  130. helper.sleep(1000);
  131. var logout = helper.findElement(by.xpath(constant.XPATH_LOGOUT));
  132. logout.click();
  133. helper.waitForElement(by.xpath(constant.XPATH_GITHUB_SIGNUP), constant.DEFAULT_TIMEOUT);
  134. });
  135. };
  136. User.prototype.isLogged = function () {
  137. browser.driver.isElementPresent();
  138. };
  139. module.exports.User = User;