-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhackerrankPromisified.js
143 lines (137 loc) · 5.01 KB
/
hackerrankPromisified.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
const puppeteer = require("puppeteer");
const mail = "wenerol220@hhmel.com";
const pass = "automation";
const code = require('./code');
let browserPromise = puppeteer.launch({ headless: false, defaultViewport: null,args: ['--start-fullscreen'] });
let page;
browserPromise.then(function(browser){
console.log("Browser is opened");
let pagePromise = browser.newPage();
return pagePromise;
}).then(function(pageInstance){
console.log("Page is opened");
page = pageInstance
let urlPromise = page.goto('https://www.hackerrank.com/');
return urlPromise;
}).then(function(){
return waitAndClick('ul.menu a');
}).then(function(){
let waitPromise = page.waitForSelector(".fl-module-content.fl-node-content .fl-button");
return waitPromise;
}).then(function(){
let domClickPromse = page.evaluate(function(){
let btns = document.querySelectorAll(".fl-module-content.fl-node-content .fl-button");
btns[1].click();
return;
});
return domClickPromse;
}).then(function(){
let waitPromise = page.waitForSelector("#input-1");
return waitPromise;
}).then(function(){
let mailTypedPromise = page.type("#input-1",mail,{ delay: 100 });
return mailTypedPromise;
}).then(function(){
let passTypedPromise = page.type("#input-2",pass,{delay:100});
return passTypedPromise;
}).then(function(){
let clickPromse = page.click('button[data-analytics="LoginPassword"]');
return clickPromse;
}).then(function(){
return waitAndClick('[data-automation="algorithms"]');
})
.then(function(){
return page.waitForSelector(".filter-group");
}).then(function(){
let domSelectPromise = page.evaluate(function(){
let allDivs = document.querySelectorAll(".filter-group");
let div = allDivs[3];
let clickSelector = div.querySelector(".ui-checklist-list-item input");
clickSelector.click();
return;
})
return domSelectPromise;
}).then(function(){
console.log("warmup Selected");
return page.waitForSelector('.challenges-list .js-track-click.challenge-list-item');
}).then(function(){
let arrPromise = page.evaluate(function(){
let arr = [];
let aTags = document.querySelectorAll('.challenges-list .js-track-click.challenge-list-item');
for(let i=0;i<aTags.length;i++){
let link = aTags[i].href;
console.log(link);
arr.push(link);
}
return arr;
})
return arrPromise;
}).then(function(questionsArr){
console.log(questionsArr);
console.log(code.answers.length);
let questionPromise = questionSolver(questionsArr[0],code.answers[0]);
for(let i=1;i<questionsArr.length;i++){
questionPromise = questionPromise.then(function(){
let nextQuestionPromise = questionSolver(questionsArr[i],code.answers[i]);
return nextQuestionPromise;
})
}
return questionPromise;
}).then(function(){
console.log("All the warm up questions have been submitted!!!");
})
function waitAndClick(selector){
return new Promise(function(resolve,reject){
let waitPromise = page.waitForSelector(selector);
waitPromise.then(function(){
let clickPromise = page.click(selector,{delay:1000});
return clickPromise;
}).then(function(){
resolve();
});
})
}
function questionSolver(question,answer){
return new Promise(function(resolve,reject){
let linkPromise = page.goto(question);
linkPromise.then(function(){
return waitAndClick('.checkBoxWrapper input');
}).then(function(){
return waitAndClick('.ui-tooltip-wrapper textarea');
}).then(function(){
let typePromise = page.type('.ui-tooltip-wrapper textarea',answer);
return typePromise;
}).then(function(){
let holdControl = page.keyboard.down('Control');
return holdControl;
}).then(function(){
let pressA = page.keyboard.press('A');
return pressA;
}).then(function(){
let pressX = page.keyboard.press('X');
return pressX;
}).then(function(){
let upControl = page.keyboard.up('Control');
return upControl;
}).then(function(){
return waitAndClick('.monaco-editor.no-user-select.vs',{delay:100});
}).then(function(){
let holdControl = page.keyboard.down('Control');
return holdControl;
}).then(function(){
let pressA = page.keyboard.press('A');
return pressA;
}).then(function(){
let pressV = page.keyboard.press('V');
return pressV;
}).then(function(){
let upControl = page.keyboard.up('Control');
return upControl;
}).then(function(){
return waitAndClick('.ui-btn.ui-btn-normal.ui-btn-primary.pull-right.hr-monaco-submit.ui-btn-styled');
}).then(function(){
console.log("questions submitted success");
resolve();
})
})
}