-
Notifications
You must be signed in to change notification settings - Fork 0
/
hk.js
154 lines (145 loc) · 4.6 KB
/
hk.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
144
145
146
147
148
149
150
151
152
153
154
const loginLink = "https://www.hackerrank.com/auth/login";
let email = "fesagom584@chatich.com";
let password = "pepcoding123";
let puppeteer = require("puppeteer");
const codeFile = require("./code");
console.log("Before");
let page;
// Puppeteer works on promises
let browserWillbeLauncedPromise = puppeteer.launch({
headless: false,
defaultViewport: null,
args: ["--start-maximized"],
});
// we used puppeteer launch method to return an instance of broswer
browserWillbeLauncedPromise
.then(function (browserInstance) {
let newTabPromise = browserInstance.newPage();
return newTabPromise;
})
.then(function (newTab) {
console.log("New Tab opened");
page = newTab;
let pageWillbeOpenedPromise = newTab.goto(loginLink);
return pageWillbeOpenedPromise;
})
.then(function () {
let typedEmailPromise = page.type("input[id='input-1']", email, {
delay: 100,
});
return typedEmailPromise;
})
.then(function () {
let typePasswordPromise = page.type("input[id='input-2']", password, {
delay: 100,
});
return typePasswordPromise;
})
.then(function () {
let loginPromise = page.click('button[data-analytics="LoginPassword"]', {
delay: 100,
});
return loginPromise;
})
.then(function () {
let algoWillBeclickedPromise = waitAndClick(
'.topic-card a[data-attr1="algorithms"]',
page
);
return algoWillBeclickedPromise;
})
.then(function () {
let getToWarmupPromise = waitAndClick('input[value="warmup"]', page);
return getToWarmupPromise;
})
.then(function () {
let ChallengesArrPromise = page.$$(
".ui-btn.ui-btn-normal.primary-cta.ui-btn-line-primary.ui-btn-styled",
{ delay: 100 }
);
return ChallengesArrPromise;
})
.then(function (questionsArr) {
console.log("No of Questions" + questionsArr.length);
let questionWillBeSolvedPromise = questionSolver(
page,
questionsArr[0],
codeFile.answers[0]
);
return questionWillBeSolvedPromise
});
function waitAndClick(selector, cPage) {
return new Promise(function (resolve, reject) {
let waitForModalPromise = cPage.waitForSelector(selector);
waitForModalPromise
.then(function () {
let clickModalPromise = cPage.click(selector, { delay: 100 });
return clickModalPromise;
})
.then(function () {
resolve();
})
.catch(function () {
reject();
});
});
}
function questionSolver(page, question, answer) {
return new Promise(function (resolve, reject) {
let questionWillBeClickedPromise = question.click();
questionWillBeClickedPromise
.then(function () {
let waitForEditorPromise = waitAndClick(
".monaco-editor.no-user-select.vs",
page
);
return waitForEditorPromise;
})
.then(function () {
return waitAndClick(".checkbox-input", page);
})
.then(function () {
return page.waitForSelector(".text-area.custominput");
})
.then(function () {
return page.type(".text-area.custominput", answer, { delay: 20 });
})
.then(function () {
let ctrlonHoldPromise = page.keyboard.down('Control');
return ctrlonHoldPromise
}).then(function(){
let AisPressedPromise = page.keyboard.press('A' , {delay : 20});
return AisPressedPromise
}).then(function(){
let XisPressedPromise = page.keyboard.press('X' , {delay:20})
return XisPressedPromise
}).then(function(){
let ctrlIsReleasedPromise = page.keyboard.up('Control')
return ctrlIsReleasedPromise
}).then(function () {
let waitForEditorPromise = waitAndClick(
".monaco-editor.no-user-select.vs",
page
);
return waitForEditorPromise;
}).then(function () {
let ctrlonHoldPromise = page.keyboard.down('Control');
return ctrlonHoldPromise
}).then(function(){
let AisPressedPromise = page.keyboard.press('A' , {delay : 20});
return AisPressedPromise
}).then(function(){
let VisPressedPromise = page.keyboard.press('V' , {delay:20})
return VisPressedPromise
}).then(function(){
let ctrlIsReleasedPromise = page.keyboard.up('Control')
return ctrlIsReleasedPromise
}).then(function(){
return page.click('.hr-monaco__run-code' , {delay : 20})
}).then(function(){
resolve()
}).catch(function(err){
console.log(err)
})
});
}