Skip to content

Commit f6737bc

Browse files
committed
Refresh Recorder Mode with "codegen" and more
1 parent 2a46f6f commit f6737bc

File tree

7 files changed

+80
-41
lines changed

7 files changed

+80
-41
lines changed

seleniumbase/console_scripts/run.py

Lines changed: 53 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
sbase options
1212
sbase mkdir ui_tests
1313
sbase mkfile new_test.py
14-
sbase mkrec new_test.py
14+
sbase mkrec new_test.py # Same as "sbase codegen new_test.py"
1515
sbase mkpres new_presentation.py
1616
sbase mkchart new_chart.py
1717
sbase convert webdriver_unittest_file.py
@@ -70,26 +70,26 @@ def show_basic_usage():
7070
sc += ' * OR: "sbase [COMMAND] [PARAMETERS]"\n'
7171
sc += "\n"
7272
sc += "COMMANDS:\n"
73-
sc += " install [DRIVER] [OPTIONS]\n"
74-
sc += " methods (List common Python methods)\n"
75-
sc += " options (List common pytest options)\n"
76-
sc += " mkdir [DIRECTORY] [OPTIONS]\n"
77-
sc += " mkfile [FILE.py] [OPTIONS]\n"
78-
sc += " mkrec [FILE.py]\n"
79-
sc += " mkpres [FILE.py] [LANG]\n"
80-
sc += " mkchart [FILE.py] [LANG]\n"
81-
sc += " print [FILE] [OPTIONS]\n"
82-
sc += " translate [SB_FILE.py] [LANG] [ACTION]\n"
83-
sc += " convert [WEBDRIVER_UNITTEST_FILE.py]\n"
84-
sc += " extract-objects [SB_FILE.py]\n"
85-
sc += " inject-objects [SB_FILE.py] [OPTIONS]\n"
86-
sc += " objectify [SB_FILE.py] [OPTIONS]\n"
87-
sc += " revert-objects [SB_FILE.py] [OPTIONS]\n"
88-
sc += " encrypt (OR: obfuscate)\n"
89-
sc += " decrypt (OR: unobfuscate)\n"
90-
sc += " download server (The Selenium Grid JAR file)\n"
91-
sc += " grid-hub [start|stop] [OPTIONS]\n"
92-
sc += " grid-node [start|stop] --hub=[HOST/IP]\n"
73+
sc += " install [DRIVER] [OPTIONS]\n"
74+
sc += " methods (List common Python methods)\n"
75+
sc += " options (List common pytest options)\n"
76+
sc += " mkdir [DIRECTORY] [OPTIONS]\n"
77+
sc += " mkfile [FILE.py] [OPTIONS]\n"
78+
sc += " mkrec / codegen [FILE.py]\n"
79+
sc += " mkpres [FILE.py] [LANG]\n"
80+
sc += " mkchart [FILE.py] [LANG]\n"
81+
sc += " print [FILE] [OPTIONS]\n"
82+
sc += " translate [SB_FILE.py] [LANG] [ACTION]\n"
83+
sc += " convert [WEBDRIVER_UNITTEST_FILE.py]\n"
84+
sc += " extract-objects [SB_FILE.py]\n"
85+
sc += " inject-objects [SB_FILE.py] [OPTIONS]\n"
86+
sc += " objectify [SB_FILE.py] [OPTIONS]\n"
87+
sc += " revert-objects [SB_FILE.py] [OPTIONS]\n"
88+
sc += " encrypt / obfuscate\n"
89+
sc += " decrypt / unobfuscate\n"
90+
sc += " download server (Get Selenium Grid JAR file)\n"
91+
sc += " grid-hub [start|stop] [OPTIONS]\n"
92+
sc += " grid-node [start|stop] --hub=[HOST/IP]\n"
9393
sc += ' * (EXAMPLE: "sbase install chromedriver latest") *\n'
9494
sc += ""
9595
if "linux" not in sys.platform:
@@ -176,7 +176,7 @@ def show_mkfile_usage():
176176
print(" sbase mkfile new_test.py")
177177
print(" Options:")
178178
print(" -b / --basic (Basic boilerplate / single-line test)")
179-
print(" -r / --recorder (Recorder Mode has ipdb breakpoint)")
179+
print(" -r / --rec (adds ipdb breakpoint for Recorder Mode)")
180180
print(" Language Options:")
181181
print(" --en / --English | --zh / --Chinese")
182182
print(" --nl / --Dutch | --fr / --French")
@@ -213,6 +213,24 @@ def show_mkrec_usage():
213213
print("")
214214

215215

216+
def show_codegen_usage():
217+
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
218+
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
219+
cr = colorama.Style.RESET_ALL
220+
sc = " " + c2 + "** " + c3 + "codegen" + c2 + " **" + cr
221+
print(sc)
222+
print("")
223+
print(" Usage:")
224+
print(" seleniumbase codegen [FILE.py]")
225+
print(" OR: sbase codegen [FILE.py]")
226+
print(" Example:")
227+
print(" sbase codegen new_test.py")
228+
print(" Output:")
229+
print(" Creates a new SeleniumBase test using the Recorder.")
230+
print(" If the filename already exists, an error is raised.")
231+
print("")
232+
233+
216234
def show_mkpres_usage():
217235
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
218236
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
@@ -701,6 +719,7 @@ def show_detailed_help():
701719
show_mkdir_usage()
702720
show_mkfile_usage()
703721
show_mkrec_usage()
722+
show_codegen_usage()
704723
show_mkpres_usage()
705724
show_mkchart_usage()
706725
show_convert_usage()
@@ -765,6 +784,14 @@ def main():
765784
else:
766785
show_basic_usage()
767786
show_mkrec_usage()
787+
elif command == "codegen":
788+
if len(command_args) >= 1:
789+
from seleniumbase.console_scripts import sb_mkrec
790+
791+
sb_mkrec.main()
792+
else:
793+
show_basic_usage()
794+
show_codegen_usage()
768795
elif command == "mkpres":
769796
if len(command_args) >= 1:
770797
from seleniumbase.console_scripts import sb_mkpres
@@ -920,6 +947,10 @@ def main():
920947
print("")
921948
show_mkrec_usage()
922949
return
950+
elif command_args[0] == "codegen":
951+
print("")
952+
show_codegen_usage()
953+
return
923954
elif command_args[0] == "mkpres":
924955
print("")
925956
show_mkpres_usage()

seleniumbase/console_scripts/sb_mkfile.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
1212
Options:
1313
-b / --basic (Basic boilerplate / single-line test)
14-
-r / --recorder (Recorder Mode has ipdb breakpoint)
14+
-r / --rec (adds ipdb breakpoint for Recorder Mode)
1515
1616
Language Options:
1717
--en / --English | --zh / --Chinese
@@ -46,7 +46,7 @@ def invalid_run_command(msg=None):
4646
exp += " sbase mkfile new_test.py\n"
4747
exp += " Options:\n"
4848
exp += " -b / --basic (Basic boilerplate / single-line test)\n"
49-
exp += " -r / --recorder (Recorder Mode has ipdb breakpoint)\n"
49+
exp += " -r / --rec (adds ipdb breakpoint for Recorder Mode)\n"
5050
exp += " Language Options:\n"
5151
exp += " --en / --English | --zh / --Chinese\n"
5252
exp += " --nl / --Dutch | --fr / --French\n"

seleniumbase/console_scripts/sb_mkrec.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@
33
Creates a new SeleniumBase test file using the Recorder.
44
55
Usage:
6-
seleniumbase mkrec [FILE.py]
7-
or sbase mkrec [FILE.py]
6+
seleniumbase mkrec [FILE.py]
7+
sbase mkrec [FILE.py]
8+
seleniumbase codegen [FILE.py]
9+
sbase codegen [FILE.py]
810
9-
Example:
11+
Examples:
1012
sbase mkrec new_test.py
13+
sbase codegen new_test.py
1114
1215
Output:
1316
Creates a new SeleniumBase test using the Recorder.
@@ -22,12 +25,15 @@
2225

2326

2427
def invalid_run_command(msg=None):
25-
exp = " ** mkrec **\n\n"
28+
exp = " ** mkrec / codegen **\n\n"
2629
exp += " Usage:\n"
2730
exp += " seleniumbase mkrec [FILE.py]\n"
28-
exp += " OR sbase mkrec [FILE.py]\n"
29-
exp += " Example:\n"
31+
exp += " sbase mkrec [FILE.py]\n"
32+
exp += " seleniumbase codegen [FILE.py]\n"
33+
exp += " sbase codegen [FILE.py]\n"
34+
exp += " Examples:\n"
3035
exp += " sbase mkrec new_test.py\n"
36+
exp += " sbase codegen new_test.py\n"
3137
exp += " Output:\n"
3238
exp += " Creates a new SeleniumBase test using the Recorder.\n"
3339
exp += " If the filename already exists, an error is raised.\n"

seleniumbase/extensions/recorder.zip

4 Bytes
Binary file not shown.

seleniumbase/js_code/recorder_js.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -606,7 +606,7 @@
606606
else if (ra_len > 0 &&
607607
document.recorded_actions[ra_len-1][0] === 'mo_dn')
608608
{
609-
// Probably an accidental drag & drop.
609+
// Maybe an accidental drag & drop.
610610
document.recorded_actions.pop();
611611
}
612612
json_rec_act = JSON.stringify(document.recorded_actions);
@@ -642,14 +642,15 @@
642642
});
643643
document.body.addEventListener('keyup', function (event) {
644644
reset_if_recorder_undefined();
645-
// Controls for Pausing & Resuming.
645+
// Controls to Pause & Resume.
646646
pause_rec = sessionStorage.getItem('pause_recorder');
647-
if (event.key.toLowerCase() === 'escape' && pause_rec === 'no')
647+
rec_mode = sessionStorage.getItem('recorder_mode');
648+
l_key = event.key.toLowerCase();
649+
if (l_key === 'escape' && pause_rec === 'no' && rec_mode === '1')
648650
{
649651
sessionStorage.setItem('pause_recorder', 'yes');
650652
pause_rec = 'yes';
651-
sessionStorage.setItem('recorder_mode', '1');
652-
console.log('The SeleniumBase Recorder has paused.');
653+
console.log('SeleniumBase Recorder paused');
653654
no_border = 'none';
654655
document.querySelector('body').style.border = no_border;
655656
document.title = sessionStorage.getItem('recorder_title');
@@ -658,15 +659,14 @@
658659
{
659660
sessionStorage.setItem('pause_recorder', 'no');
660661
pause_rec = 'no';
661-
sessionStorage.setItem('recorder_mode', '1');
662-
console.log('The SeleniumBase Recorder has resumed.');
662+
console.log('SeleniumBase Recorder resumed');
663663
red_border = 'thick solid #EE3344';
664664
document.querySelector('body').style.border = red_border;
665665
}
666666
else if (event.key === '^' && pause_rec === 'no')
667667
{
668668
sessionStorage.setItem('recorder_mode', '2');
669-
purple_border = 'thick solid #BF40BF';
669+
purple_border = 'thick solid #EF5BE9';
670670
document.querySelector('body').style.border = purple_border;
671671
}
672672
else if (event.key === '&' && pause_rec === 'no')
@@ -675,13 +675,13 @@
675675
orange_border = 'thick solid #F28C28';
676676
document.querySelector('body').style.border = orange_border;
677677
}
678-
else if (pause_rec === 'no' && event.key.toLowerCase() !== 'shift')
678+
else if (pause_rec === 'no' && l_key !== 'shift' && l_key !== 'backspace')
679679
{
680680
sessionStorage.setItem('recorder_mode', '1');
681681
red_border = 'thick solid #EE3344';
682682
document.querySelector('body').style.border = red_border;
683683
}
684-
// After checking for pause/resume controls.
684+
// After controls for switching modes.
685685
if (sessionStorage.getItem('pause_recorder') === 'yes') return;
686686
const d_now = Date.now();
687687
const element = event.target;
@@ -692,7 +692,7 @@
692692
element.tagName.toLowerCase() === 'textarea')
693693
{
694694
ra_len = document.recorded_actions.length;
695-
if (ra_len > 0 && event.key.toLowerCase() === 'enter' &&
695+
if (ra_len > 0 && l_key === 'enter' &&
696696
document.recorded_actions[ra_len-1][0] === 'input' &&
697697
document.recorded_actions[ra_len-1][1] === selector &&
698698
!document.recorded_actions[ra_len-1][2].endsWith('\n'))

seleniumbase/plugins/pytest_plugin.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -660,6 +660,7 @@ def pytest_addoption(parser):
660660
"--recorder",
661661
"--record",
662662
"--rec",
663+
"--codegen",
663664
action="store_true",
664665
dest="recorder_mode",
665666
default=False,

seleniumbase/plugins/selenium_plugin.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,7 @@ def options(self, parser, env):
421421
"--recorder",
422422
"--record",
423423
"--rec",
424+
"--codegen",
424425
action="store_true",
425426
dest="recorder_mode",
426427
default=False,

0 commit comments

Comments
 (0)