Advertisement
developerfranky

Untitled

Feb 28th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // criticalpath--iphone-waituntil.js
  2. var webdriver = require('selenium-webdriver');
  3. var SeleniumServer = require('selenium-webdriver/remote').SeleniumServer;
  4. var request = require('request');
  5. var remoteHub = 'http://hub.crossbrowsertesting.com:80/wd/hub';
  6. var assert = require('selenium-webdriver/testing/assert');
  7. var username = 'marketing@eightsleep.com'; //replace with your email address
  8. var authkey = 'u69abfc070af6b7e'; //replace with your authkey
  9.  
  10. var caps = {
  11.     'name': 'Critical Path Mobile Explicit Waits',
  12.     'build': '1.0',
  13.     'browserName': 'Safari',
  14.     'deviceName': 'iPhone XR Simulator',
  15.     'platformVersion': '12.0',
  16.     'platformName': 'iOS',
  17.     'deviceOrientation': 'portrait',
  18.     'record_video': 'true',
  19. };
  20.  
  21.  
  22. caps.username = username;
  23. caps.password = authkey;
  24.  
  25. var sessionId = null;
  26.  
  27. //register general error handler
  28. webdriver.promise.controlFlow().on('uncaughtException', webdriverErrorHandler);
  29.  
  30. console.log('Connection to the CrossBrowserTesting remote server');
  31.  
  32. var driver = new webdriver.Builder()
  33.             .usingServer(remoteHub)
  34.             .withCapabilities(caps)
  35.             .build();
  36.  
  37. //console.log('driver is ', driver)
  38.  
  39.  
  40.  
  41. // All driver calls are automatically queued by flow control.
  42. // Async functions outside of driver can use call() function.
  43. console.log('Waiting on the browser to be launched and the session to start');
  44.  
  45. driver.getSession().then(function(session){
  46.     sessionId = session.id_; //need for API calls
  47.     console.log('Session ID: ', sessionId);
  48.     console.log('See your test run at: https://app.crossbrowsertesting.com/selenium/' + sessionId)
  49. });
  50.  
  51. //load your URL
  52. driver.get('http://staging.eightsleep.com/?dbxtest');
  53.  
  54.  
  55. driver.getTitle().then(function(title){
  56.     console.log('page title is ', title);
  57.     assert(title).equals('The Only High-Tech Bed for Better Sleep | Eight Sleep®');
  58. });
  59.  
  60.  
  61. driver.wait(webdriver.until.elementLocated(webdriver.By.css("div.Container__Inner-sc-1yvse88-0 > a.kxuhIW")), 10000).click().then(function() {
  62.     console.log('learn more button click');
  63. });
  64. driver.call(takeSnapshot);
  65.  
  66.  
  67. driver.wait(webdriver.until.elementLocated(webdriver.By.css("div.iYXIsq > a.kxuhIW")), 10000).click().then(function() {
  68.     console.log('get the pod clicked');
  69. });
  70. driver.call(takeSnapshot);
  71.  
  72.  
  73. driver.wait(webdriver.until.elementLocated(webdriver.By.id("reserve-pod-button")), 10000).click().then(function() {
  74.     console.log('reserve pod button clicked');
  75. });
  76. driver.call(takeSnapshot);
  77.  
  78. //quit the driver
  79. driver.quit()
  80.  
  81. //set the score as passing
  82. driver.call(setScore, null, 'pass').then(function(result){
  83.     console.log('set score to pass')
  84. });
  85.  
  86.  
  87. //Call API to set the score
  88. function setScore(score) {
  89.  
  90.     //webdriver has built-in promise to use
  91.     var deferred = webdriver.promise.defer();
  92.     var result = { error: false, message: null }
  93.  
  94.     if (sessionId){
  95.        
  96.         request({
  97.             method: 'PUT',
  98.             uri: 'https://crossbrowsertesting.com/api/v3/selenium/' + sessionId,
  99.             body: {'action': 'set_score', 'score': score },
  100.             json: true
  101.         },
  102.         function(error, response, body) {
  103.             if (error) {
  104.                 result.error = true;
  105.                 result.message = error;
  106.             }
  107.             else if (response.statusCode !== 200){
  108.                 result.error = true;
  109.                 result.message = body;
  110.             }
  111.             else{
  112.                 result.error = false;
  113.                 result.message = 'success';
  114.             }
  115.  
  116.             deferred.fulfill(result);
  117.         })
  118.         .auth(username, authkey);
  119.     }
  120.     else{
  121.         result.error = true;
  122.         result.message = 'Session Id was not defined';
  123.         deferred.fulfill(result);
  124.     }
  125.  
  126.     return deferred.promise;
  127. }
  128.  
  129. //Call API to get a snapshot
  130. function takeSnapshot() {
  131.  
  132.     //webdriver has built-in promise to use
  133.     var deferred = webdriver.promise.defer();
  134.     var result = { error: false, message: null }
  135.    
  136.     if (sessionId){
  137.  
  138.        
  139.         request.post(
  140.             'https://crossbrowsertesting.com/api/v3/selenium/' + sessionId + '/snapshots',
  141.             function(error, response, body) {
  142.                 if (error) {
  143.                     result.error = true;
  144.                     result.message = error;
  145.                 }
  146.                 else if (response.statusCode !== 200){
  147.                     result.error = true;
  148.                     result.message = body;
  149.                 }
  150.                 else{
  151.                     result.error = false;
  152.                     result.message = 'success';
  153.                 }
  154.                 //console.log('fulfilling promise in takeSnapshot')
  155.                 deferred.fulfill(result);
  156.             }
  157.         )
  158.         .auth(username,authkey);
  159.        
  160.     }
  161.     else{
  162.         result.error = true;
  163.         result.message = 'Session Id was not defined';
  164.         deferred.fulfill(result); //never call reject as we don't need this to actually stop the test
  165.     }
  166.  
  167.     return deferred.promise;
  168. }
  169.  
  170. //general error catching function
  171. function webdriverErrorHandler(err){
  172.  
  173.     console.error('There was an unhandled exception! ' + err);
  174.  
  175.     //if we had a session, end it and mark failed
  176.     if (driver && sessionId){
  177.         driver.quit();
  178.         setScore('fail').then(function(result){
  179.             console.log('set score to fail')
  180.         })
  181.     }
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement