Skip to content

Commit adc75e0

Browse files
committed
Update Recorder Mode
1 parent 484c8a2 commit adc75e0

File tree

3 files changed

+54
-51
lines changed

3 files changed

+54
-51
lines changed

seleniumbase/extensions/recorder.zip

75 Bytes
Binary file not shown.

seleniumbase/fixtures/base_case.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -153,8 +153,7 @@ def open(self, url):
153153
if ("http:") in c_url or ("https:") in c_url or ("file:") in c_url:
154154
if self.get_domain_url(url) != self.get_domain_url(c_url):
155155
self.open_new_window(switch_to=True)
156-
else:
157-
self.driver.get(url)
156+
self.driver.get(url)
158157
if settings.WAIT_FOR_RSC_ON_PAGE_LOADS:
159158
self.wait_for_ready_state_complete()
160159
self.__demo_mode_pause_if_active()
@@ -4977,16 +4976,19 @@ def assert_attribute(
49774976
def assert_title(self, title):
49784977
"""Asserts that the web page title matches the expected title.
49794978
When a web page initially loads, the title starts as the URL,
4980-
but then the title switches over to the actual page title.
4981-
A slow connection could delay the actual title from displaying."""
4979+
but then the title switches over to the actual page title.
4980+
In Recorder Mode, this assertion is skipped because the Recorder
4981+
changes the page title to the selector of the hovered element.
4982+
"""
49824983
self.wait_for_ready_state_complete()
49834984
expected = title.strip()
49844985
actual = self.get_page_title().strip()
49854986
error = (
49864987
"Expected page title [%s] does not match the actual title [%s]!"
49874988
)
49884989
try:
4989-
self.assertEqual(expected, actual, error % (expected, actual))
4990+
if not self.recorder_mode:
4991+
self.assertEqual(expected, actual, error % (expected, actual))
49904992
except Exception:
49914993
self.wait_for_ready_state_complete()
49924994
self.sleep(settings.MINI_TIMEOUT)
@@ -4998,7 +5000,7 @@ def assert_title(self, title):
49985000
self.sleep(settings.MINI_TIMEOUT)
49995001
actual = self.get_page_title().strip()
50005002
self.assertEqual(expected, actual, error % (expected, actual))
5001-
if self.demo_mode:
5003+
if self.demo_mode and not self.recorder_mode:
50025004
a_t = "ASSERT TITLE"
50035005
if self._language != "English":
50045006
from seleniumbase.fixtures.words import SD

seleniumbase/js_code/recorder_js.py

Lines changed: 46 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,7 @@
298298
document.recorded_actions = [];
299299
sessionStorage.setItem('pause_recorder', 'no');
300300
sessionStorage.setItem('recorder_mode', '1');
301+
sessionStorage.setItem('recorder_title', document.title)
301302
const d_now = Date.now();
302303
w_orig = window.location.origin;
303304
w_href = window.location.href;
@@ -316,14 +317,31 @@
316317
};
317318
reset_recorder_state();
318319
320+
var reset_if_recorder_undefined = function() {
321+
if (typeof document.recorded_actions === 'undefined')
322+
reset_recorder_state();
323+
};
324+
325+
document.body.addEventListener('mouseover', function (event) {
326+
reset_if_recorder_undefined();
327+
if (sessionStorage.getItem('pause_recorder') === 'yes') return;
328+
const element = event.target;
329+
const selector = getBestSelector(element);
330+
if (!selector.startsWith('body') && !selector.includes(' div')) {
331+
document.title = selector;
332+
}
333+
});
334+
document.body.addEventListener('mouseout', function (event) {
335+
reset_if_recorder_undefined();
336+
if (sessionStorage.getItem('pause_recorder') === 'yes') return;
337+
document.title = sessionStorage.getItem('recorder_title');
338+
});
319339
document.body.addEventListener('click', function (event) {
320340
// Do Nothing.
321341
});
322342
document.body.addEventListener('formdata', function (event) {
323-
if (typeof document.recorded_actions === 'undefined')
324-
reset_recorder_state();
325-
if (sessionStorage.getItem('pause_recorder') === 'yes')
326-
return;
343+
reset_if_recorder_undefined();
344+
if (sessionStorage.getItem('pause_recorder') === 'yes') return;
327345
const d_now = Date.now();
328346
ra_len = document.recorded_actions.length;
329347
if (ra_len > 0 &&
@@ -339,10 +357,8 @@
339357
}
340358
});
341359
document.body.addEventListener('dragstart', function (event) {
342-
if (typeof document.recorded_actions === 'undefined')
343-
reset_recorder_state();
344-
if (sessionStorage.getItem('pause_recorder') === 'yes')
345-
return;
360+
reset_if_recorder_undefined();
361+
if (sessionStorage.getItem('pause_recorder') === 'yes') return;
346362
const d_now = Date.now();
347363
const element = event.target;
348364
const selector = getBestSelector(element);
@@ -360,10 +376,8 @@
360376
sessionStorage.setItem('recorded_actions', json_rec_act);
361377
});
362378
document.body.addEventListener('dragend', function (event) {
363-
if (typeof document.recorded_actions === 'undefined')
364-
reset_recorder_state();
365-
if (sessionStorage.getItem('pause_recorder') === 'yes')
366-
return;
379+
reset_if_recorder_undefined();
380+
if (sessionStorage.getItem('pause_recorder') === 'yes') return;
367381
ra_len = document.recorded_actions.length;
368382
if (ra_len > 0 && document.recorded_actions[ra_len-1][0] === 'drags')
369383
{
@@ -373,10 +387,8 @@
373387
}
374388
});
375389
document.body.addEventListener('drop', function (event) {
376-
if (typeof document.recorded_actions === 'undefined')
377-
reset_recorder_state();
378-
if (sessionStorage.getItem('pause_recorder') === 'yes')
379-
return;
390+
reset_if_recorder_undefined();
391+
if (sessionStorage.getItem('pause_recorder') === 'yes') return;
380392
const d_now = Date.now();
381393
const element = event.target;
382394
const selector = getBestSelector(element);
@@ -391,10 +403,8 @@
391403
}
392404
});
393405
document.body.addEventListener('change', function (event) {
394-
if (typeof document.recorded_actions === 'undefined')
395-
reset_recorder_state();
396-
if (sessionStorage.getItem('pause_recorder') === 'yes')
397-
return;
406+
reset_if_recorder_undefined();
407+
if (sessionStorage.getItem('pause_recorder') === 'yes') return;
398408
const d_now = Date.now();
399409
const element = event.target;
400410
const selector = getBestSelector(element);
@@ -414,7 +424,7 @@
414424
document.recorded_actions.pop();
415425
ra_len = document.recorded_actions.length;
416426
}
417-
// Do it twice for click and multiple changes.
427+
// Again for click & more changes.
418428
if (ra_len > 0 && document.recorded_actions[ra_len-1][1] === selector)
419429
{
420430
document.recorded_actions.pop();
@@ -436,13 +446,13 @@
436446
document.recorded_actions[ra_len-1][1] === selector &&
437447
tag_name === 'input' && e_type === 'checkbox')
438448
{
439-
// Pop duplicate checkbox state changes.
449+
// Pop extra checkbox changes.
440450
document.recorded_actions.pop();
441451
ra_len = document.recorded_actions.length;
442452
if (ra_len > 0 && document.recorded_actions[ra_len-1][1] === selector)
443453
document.recorded_actions.pop();
444454
}
445-
// Go back to `if`, not `else if`.
455+
// Use 'if' again, not 'else if'.
446456
if (tag_name === 'input' && e_type === 'checkbox' && element.checked)
447457
document.recorded_actions.push(['c_box', selector, 'yes', d_now]);
448458
else if (tag_name === 'input' && e_type === 'checkbox' && !element.checked)
@@ -451,10 +461,8 @@
451461
sessionStorage.setItem('recorded_actions', json_rec_act);
452462
});
453463
document.body.addEventListener('mousedown', function (event) {
454-
if (typeof document.recorded_actions === 'undefined')
455-
reset_recorder_state();
456-
if (sessionStorage.getItem('pause_recorder') === 'yes')
457-
return;
464+
reset_if_recorder_undefined();
465+
if (sessionStorage.getItem('pause_recorder') === 'yes') return;
458466
const d_now = Date.now();
459467
const element = event.target;
460468
const selector = getBestSelector(element);
@@ -463,18 +471,16 @@
463471
if (ra_len > 0 && document.recorded_actions[ra_len-1][0] === 'mo_dn')
464472
document.recorded_actions.pop();
465473
if (tag_name === 'select') {
466-
// Do Nothing. (Handle select in 'change' action.)
474+
// Do Nothing. (Handle in 'change' action.)
467475
}
468476
else
469477
document.recorded_actions.push(['mo_dn', selector, '', d_now]);
470478
json_rec_act = JSON.stringify(document.recorded_actions);
471479
sessionStorage.setItem('recorded_actions', json_rec_act);
472480
});
473481
document.body.addEventListener('mouseup', function (event) {
474-
if (typeof document.recorded_actions === 'undefined')
475-
reset_recorder_state();
476-
if (sessionStorage.getItem('pause_recorder') === 'yes')
477-
return;
482+
reset_if_recorder_undefined();
483+
if (sessionStorage.getItem('pause_recorder') === 'yes') return;
478484
const d_now = Date.now();
479485
const element = event.target;
480486
const selector = getBestSelector(element);
@@ -606,10 +612,8 @@
606612
sessionStorage.setItem('recorded_actions', json_rec_act);
607613
});
608614
document.body.addEventListener('contextmenu', function (event) {
609-
if (typeof document.recorded_actions === 'undefined')
610-
reset_recorder_state();
611-
if (sessionStorage.getItem('pause_recorder') === 'yes')
612-
return;
615+
reset_if_recorder_undefined();
616+
if (sessionStorage.getItem('pause_recorder') === 'yes') return;
613617
const element = event.target;
614618
const selector = getBestSelector(element);
615619
ra_len = document.recorded_actions.length;
@@ -623,10 +627,8 @@
623627
}
624628
});
625629
document.body.addEventListener('keydown', function (event) {
626-
if (typeof document.recorded_actions === 'undefined')
627-
reset_recorder_state();
628-
if (sessionStorage.getItem('pause_recorder') === 'yes')
629-
return;
630+
reset_if_recorder_undefined();
631+
if (sessionStorage.getItem('pause_recorder') === 'yes') return;
630632
ra_len = document.recorded_actions.length;
631633
if (ra_len > 0 &&
632634
document.recorded_actions[ra_len-1][0] === 'mo_dn' &&
@@ -638,8 +640,7 @@
638640
}
639641
});
640642
document.body.addEventListener('keyup', function (event) {
641-
if (typeof document.recorded_actions === 'undefined')
642-
reset_recorder_state();
643+
reset_if_recorder_undefined();
643644
// Controls for Pausing & Resuming.
644645
pause_rec = sessionStorage.getItem('pause_recorder');
645646
if (event.key.toLowerCase() === 'escape' && pause_rec === 'no')
@@ -650,6 +651,7 @@
650651
console.log('The SeleniumBase Recorder has paused.');
651652
no_border = 'none';
652653
document.querySelector('body').style.border = no_border;
654+
document.title = sessionStorage.getItem('recorder_title');
653655
}
654656
else if ((event.key === '`' || event.key === '~') && pause_rec === 'yes')
655657
{
@@ -678,9 +680,8 @@
678680
red_border = 'thick solid #EE3344';
679681
document.querySelector('body').style.border = red_border;
680682
}
681-
// Continue after checking for pause/resume controls.
682-
if (sessionStorage.getItem('pause_recorder') === 'yes')
683-
return;
683+
// After checking for pause/resume controls.
684+
if (sessionStorage.getItem('pause_recorder') === 'yes') return;
684685
const d_now = Date.now();
685686
const element = event.target;
686687
const selector = getBestSelector(element);

0 commit comments

Comments
 (0)