seleniumbase 4.42.6__py3-none-any.whl → 4.43.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of seleniumbase might be problematic. Click here for more details.
- seleniumbase/__version__.py +1 -1
- seleniumbase/behave/behave_sb.py +2 -3
- seleniumbase/console_scripts/sb_caseplans.py +2 -3
- seleniumbase/console_scripts/sb_mkchart.py +1 -2
- seleniumbase/console_scripts/sb_mkdir.py +23 -29
- seleniumbase/console_scripts/sb_mkfile.py +1 -2
- seleniumbase/console_scripts/sb_mkpres.py +1 -2
- seleniumbase/console_scripts/sb_mkrec.py +1 -2
- seleniumbase/console_scripts/sb_objectify.py +2 -3
- seleniumbase/core/browser_launcher.py +1 -3
- seleniumbase/core/log_helper.py +3 -4
- seleniumbase/core/report_helper.py +1 -2
- seleniumbase/core/sb_cdp.py +17 -41
- seleniumbase/core/tour_helper.py +1 -2
- seleniumbase/fixtures/base_case.py +26 -25
- seleniumbase/fixtures/page_actions.py +1 -2
- seleniumbase/fixtures/page_utils.py +2 -3
- seleniumbase/plugins/basic_test_info.py +2 -3
- seleniumbase/plugins/page_source.py +2 -3
- seleniumbase/plugins/pytest_plugin.py +2 -3
- seleniumbase/translate/translator.py +1 -2
- seleniumbase/undetected/cdp_driver/browser.py +2 -1
- seleniumbase/undetected/cdp_driver/connection.py +0 -2
- seleniumbase/utilities/selenium_grid/grid_hub.py +1 -2
- seleniumbase/utilities/selenium_grid/grid_node.py +2 -3
- seleniumbase/utilities/selenium_ide/convert_ide.py +1 -2
- {seleniumbase-4.42.6.dist-info → seleniumbase-4.43.1.dist-info}/METADATA +13 -12
- {seleniumbase-4.42.6.dist-info → seleniumbase-4.43.1.dist-info}/RECORD +32 -32
- {seleniumbase-4.42.6.dist-info → seleniumbase-4.43.1.dist-info}/WHEEL +0 -0
- {seleniumbase-4.42.6.dist-info → seleniumbase-4.43.1.dist-info}/entry_points.txt +0 -0
- {seleniumbase-4.42.6.dist-info → seleniumbase-4.43.1.dist-info}/licenses/LICENSE +0 -0
- {seleniumbase-4.42.6.dist-info → seleniumbase-4.43.1.dist-info}/top_level.txt +0 -0
seleniumbase/__version__.py
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# seleniumbase package
|
|
2
|
-
__version__ = "4.
|
|
2
|
+
__version__ = "4.43.1"
|
seleniumbase/behave/behave_sb.py
CHANGED
|
@@ -1205,7 +1205,6 @@ def dashboard_pre_processing():
|
|
|
1205
1205
|
|
|
1206
1206
|
|
|
1207
1207
|
def _create_dashboard_assets_():
|
|
1208
|
-
import codecs
|
|
1209
1208
|
from seleniumbase.js_code.live_js import live_js
|
|
1210
1209
|
from seleniumbase.core.style_sheet import get_pytest_style
|
|
1211
1210
|
|
|
@@ -1222,7 +1221,7 @@ def _create_dashboard_assets_():
|
|
|
1222
1221
|
if existing_pytest_style == get_pytest_style():
|
|
1223
1222
|
add_pytest_style_css = False
|
|
1224
1223
|
if add_pytest_style_css:
|
|
1225
|
-
out_file =
|
|
1224
|
+
out_file = open(pytest_style_css, "w+", encoding="utf-8")
|
|
1226
1225
|
out_file.writelines(get_pytest_style())
|
|
1227
1226
|
out_file.close()
|
|
1228
1227
|
live_js_file = os.path.join(assets_folder, "live.js")
|
|
@@ -1234,7 +1233,7 @@ def _create_dashboard_assets_():
|
|
|
1234
1233
|
if existing_live_js == live_js:
|
|
1235
1234
|
add_live_js_file = False
|
|
1236
1235
|
if add_live_js_file:
|
|
1237
|
-
out_file =
|
|
1236
|
+
out_file = open(live_js_file, "w+", encoding="utf-8")
|
|
1238
1237
|
out_file.writelines(live_js)
|
|
1239
1238
|
out_file.close()
|
|
1240
1239
|
|
|
@@ -15,7 +15,6 @@ Examples:
|
|
|
15
15
|
Output:
|
|
16
16
|
Launches the SeleniumBase Case Plans Generator.
|
|
17
17
|
"""
|
|
18
|
-
import codecs
|
|
19
18
|
import colorama
|
|
20
19
|
import os
|
|
21
20
|
import subprocess
|
|
@@ -135,7 +134,7 @@ def generate_case_plan_boilerplates(
|
|
|
135
134
|
file_name = case_id
|
|
136
135
|
file_path = os.path.join(full_folder_path, file_name)
|
|
137
136
|
if not os.path.exists(file_path):
|
|
138
|
-
out_file =
|
|
137
|
+
out_file = open(file_path, "w+", "utf-8")
|
|
139
138
|
out_file.writelines("\r\n".join(data))
|
|
140
139
|
out_file.close()
|
|
141
140
|
new_plans += 1
|
|
@@ -316,7 +315,7 @@ def view_summary_of_existing_case_plans(root, tests):
|
|
|
316
315
|
full_plan = plan_head
|
|
317
316
|
|
|
318
317
|
file_path = "case_summary.md"
|
|
319
|
-
file =
|
|
318
|
+
file = open(file_path, "w+", "utf-8")
|
|
320
319
|
file.writelines("\r\n".join(full_plan))
|
|
321
320
|
file.close()
|
|
322
321
|
|
|
@@ -22,7 +22,6 @@ Output:
|
|
|
22
22
|
and use a "sky" theme with "slide" transition.
|
|
23
23
|
The chart can be used as a basic boilerplate.
|
|
24
24
|
"""
|
|
25
|
-
import codecs
|
|
26
25
|
import colorama
|
|
27
26
|
import os
|
|
28
27
|
import sys
|
|
@@ -254,7 +253,7 @@ def main():
|
|
|
254
253
|
continue
|
|
255
254
|
new_data.append(line)
|
|
256
255
|
data = new_data
|
|
257
|
-
file =
|
|
256
|
+
file = open(file_path, "w+", "utf-8")
|
|
258
257
|
file.writelines("\r\n".join(data))
|
|
259
258
|
file.close()
|
|
260
259
|
if " " not in file_name:
|
|
@@ -18,7 +18,6 @@ Output:
|
|
|
18
18
|
and Python boilerplates for setting up customized
|
|
19
19
|
test frameworks.
|
|
20
20
|
"""
|
|
21
|
-
import codecs
|
|
22
21
|
import colorama
|
|
23
22
|
import os
|
|
24
23
|
import sys
|
|
@@ -114,7 +113,7 @@ def main():
|
|
|
114
113
|
data.append(seleniumbase_req)
|
|
115
114
|
data.append("")
|
|
116
115
|
file_path = "%s/%s" % (dir_name, "requirements.txt")
|
|
117
|
-
file =
|
|
116
|
+
file = open(file_path, "w+", "utf-8")
|
|
118
117
|
file.writelines("\r\n".join(data))
|
|
119
118
|
file.close()
|
|
120
119
|
|
|
@@ -152,7 +151,7 @@ def main():
|
|
|
152
151
|
data.append(" production: custom marker")
|
|
153
152
|
data.append("")
|
|
154
153
|
file_path = "%s/%s" % (dir_name, "pytest.ini")
|
|
155
|
-
file =
|
|
154
|
+
file = open(file_path, "w+", "utf-8")
|
|
156
155
|
file.writelines("\r\n".join(data))
|
|
157
156
|
file.close()
|
|
158
157
|
|
|
@@ -169,14 +168,14 @@ def main():
|
|
|
169
168
|
data.append("show_skipped=false")
|
|
170
169
|
data.append("show_timings=false")
|
|
171
170
|
file_path = "%s/%s" % (dir_name, "setup.cfg")
|
|
172
|
-
file =
|
|
171
|
+
file = open(file_path, "w+", "utf-8")
|
|
173
172
|
file.writelines("\r\n".join(data))
|
|
174
173
|
file.close()
|
|
175
174
|
|
|
176
175
|
data = []
|
|
177
176
|
data.append("")
|
|
178
177
|
file_path = "%s/%s" % (dir_name, "__init__.py")
|
|
179
|
-
file =
|
|
178
|
+
file = open(file_path, "w+", "utf-8")
|
|
180
179
|
file.writelines("\r\n".join(data))
|
|
181
180
|
file.close()
|
|
182
181
|
|
|
@@ -312,7 +311,7 @@ def main():
|
|
|
312
311
|
data.append("temp_*/")
|
|
313
312
|
data.append("node_modules")
|
|
314
313
|
file_path = "%s/%s" % (dir_name, ".gitignore")
|
|
315
|
-
file =
|
|
314
|
+
file = open(file_path, "w+", "utf-8")
|
|
316
315
|
file.writelines("\r\n".join(data))
|
|
317
316
|
file.close()
|
|
318
317
|
|
|
@@ -324,7 +323,7 @@ def main():
|
|
|
324
323
|
data.append(" ├── requirements.txt")
|
|
325
324
|
data.append(" └── setup.cfg")
|
|
326
325
|
file_path = "%s/%s" % (dir_name, "outline.rst")
|
|
327
|
-
file =
|
|
326
|
+
file = open(file_path, "w+", "utf-8")
|
|
328
327
|
file.writelines("\r\n".join(data))
|
|
329
328
|
file.close()
|
|
330
329
|
os.system("sbase print %s -n" % file_path)
|
|
@@ -368,7 +367,7 @@ def main():
|
|
|
368
367
|
data.append(' self.assert_element("div#login_button_container")')
|
|
369
368
|
data.append("")
|
|
370
369
|
file_path = "%s/%s" % (dir_name, "my_first_test.py")
|
|
371
|
-
file =
|
|
370
|
+
file = open(file_path, "w+", "utf-8")
|
|
372
371
|
file.writelines("\r\n".join(data))
|
|
373
372
|
file.close()
|
|
374
373
|
|
|
@@ -461,7 +460,7 @@ def main():
|
|
|
461
460
|
data.append(' self.assert_text("SeleniumBase", "h2")')
|
|
462
461
|
data.append("")
|
|
463
462
|
file_path = "%s/%s" % (dir_name, "test_demo_site.py")
|
|
464
|
-
file =
|
|
463
|
+
file = open(file_path, "w+", "utf-8")
|
|
465
464
|
file.writelines("\r\n".join(data))
|
|
466
465
|
file.close()
|
|
467
466
|
|
|
@@ -500,7 +499,7 @@ def main():
|
|
|
500
499
|
data.append(' self.assert_title_contains(title_text)')
|
|
501
500
|
data.append("")
|
|
502
501
|
file_path = "%s/%s" % (dir_name, "parameterized_test.py")
|
|
503
|
-
file =
|
|
502
|
+
file = open(file_path, "w+", "utf-8")
|
|
504
503
|
file.writelines("\r\n".join(data))
|
|
505
504
|
file.close()
|
|
506
505
|
|
|
@@ -510,7 +509,7 @@ def main():
|
|
|
510
509
|
data = []
|
|
511
510
|
data.append("")
|
|
512
511
|
file_path = "%s/%s" % (dir_name_2, "__init__.py")
|
|
513
|
-
file =
|
|
512
|
+
file = open(file_path, "w+", "utf-8")
|
|
514
513
|
file.writelines("\r\n".join(data))
|
|
515
514
|
file.close()
|
|
516
515
|
|
|
@@ -545,7 +544,7 @@ def main():
|
|
|
545
544
|
data.append(" pass")
|
|
546
545
|
data.append("")
|
|
547
546
|
file_path = "%s/%s" % (dir_name_2, "base_test_case.py")
|
|
548
|
-
file =
|
|
547
|
+
file = open(file_path, "w+", "utf-8")
|
|
549
548
|
file.writelines("\r\n".join(data))
|
|
550
549
|
file.close()
|
|
551
550
|
|
|
@@ -554,7 +553,7 @@ def main():
|
|
|
554
553
|
data.append(' html = "html"')
|
|
555
554
|
data.append("")
|
|
556
555
|
file_path = "%s/%s" % (dir_name_2, "page_objects.py")
|
|
557
|
-
file =
|
|
556
|
+
file = open(file_path, "w+", "utf-8")
|
|
558
557
|
file.writelines("\r\n".join(data))
|
|
559
558
|
file.close()
|
|
560
559
|
|
|
@@ -570,7 +569,7 @@ def main():
|
|
|
570
569
|
data.append(" self.assert_element(Page.html)")
|
|
571
570
|
data.append("")
|
|
572
571
|
file_path = "%s/%s" % (dir_name_2, "boilerplate_test.py")
|
|
573
|
-
file =
|
|
572
|
+
file = open(file_path, "w+", "utf-8")
|
|
574
573
|
file.writelines("\r\n".join(data))
|
|
575
574
|
file.close()
|
|
576
575
|
|
|
@@ -594,7 +593,7 @@ def main():
|
|
|
594
593
|
data.append(' DataPage().add_input_text(self, "Goodbye!")')
|
|
595
594
|
data.append("")
|
|
596
595
|
file_path = "%s/%s" % (dir_name_2, "classic_obj_test.py")
|
|
597
|
-
file =
|
|
596
|
+
file = open(file_path, "w+", "utf-8")
|
|
598
597
|
file.writelines("\r\n".join(data))
|
|
599
598
|
file.close()
|
|
600
599
|
|
|
@@ -614,7 +613,7 @@ def main():
|
|
|
614
613
|
data.append(' DataPage().add_input_text(sb, "Goodbye!")')
|
|
615
614
|
data.append("")
|
|
616
615
|
file_path = "%s/%s" % (dir_name_2, "sb_fixture_test.py")
|
|
617
|
-
file =
|
|
616
|
+
file = open(file_path, "w+", "utf-8")
|
|
618
617
|
file.writelines("\r\n".join(data))
|
|
619
618
|
file.close()
|
|
620
619
|
|
|
@@ -624,7 +623,7 @@ def main():
|
|
|
624
623
|
data = []
|
|
625
624
|
data.append("")
|
|
626
625
|
file_path = "%s/%s" % (dir_name_3, "__init__.py")
|
|
627
|
-
file =
|
|
626
|
+
file = open(file_path, "w+", "utf-8")
|
|
628
627
|
file.writelines("\r\n".join(data))
|
|
629
628
|
file.close()
|
|
630
629
|
|
|
@@ -636,17 +635,12 @@ def main():
|
|
|
636
635
|
data.append("")
|
|
637
636
|
data.append("class GoogleTests(BaseCase):")
|
|
638
637
|
data.append(" def test_google_dot_com(self):")
|
|
638
|
+
data.append(" if self.headless:")
|
|
639
|
+
data.append(' self.skip("Skipping test in headless mode.")')
|
|
639
640
|
data.append(" if not self.undetectable:")
|
|
640
641
|
data.append(" self.get_new_driver(undetectable=True)")
|
|
641
642
|
data.append(' self.open("https://google.com/ncr")')
|
|
642
643
|
data.append(' self.assert_title_contains("Google")')
|
|
643
|
-
data.append(" self.sleep(0.05)")
|
|
644
|
-
data.append(" self.save_screenshot_to_logs()")
|
|
645
|
-
data.append(
|
|
646
|
-
" self.wait_for_element('iframe[role=\"presentation\"]')"
|
|
647
|
-
)
|
|
648
|
-
data.append(" self.hide_elements('iframe')")
|
|
649
|
-
data.append(" self.sleep(0.05)")
|
|
650
644
|
data.append(" self.save_screenshot_to_logs()")
|
|
651
645
|
data.append(' self.type(HomePage.search_box, "github.com")')
|
|
652
646
|
data.append(" self.assert_element(HomePage.search_button)")
|
|
@@ -657,7 +651,7 @@ def main():
|
|
|
657
651
|
)
|
|
658
652
|
data.append("")
|
|
659
653
|
file_path = "%s/%s" % (dir_name_3, "google_test.py")
|
|
660
|
-
file =
|
|
654
|
+
file = open(file_path, "w+", "utf-8")
|
|
661
655
|
file.writelines("\r\n".join(data))
|
|
662
656
|
file.close()
|
|
663
657
|
|
|
@@ -675,7 +669,7 @@ def main():
|
|
|
675
669
|
data.append(' search_results = "div#center_col"')
|
|
676
670
|
data.append("")
|
|
677
671
|
file_path = "%s/%s" % (dir_name_3, "google_objects.py")
|
|
678
|
-
file =
|
|
672
|
+
file = open(file_path, "w+", "utf-8")
|
|
679
673
|
file.writelines("\r\n".join(data))
|
|
680
674
|
file.close()
|
|
681
675
|
|
|
@@ -707,7 +701,7 @@ def main():
|
|
|
707
701
|
data.append(' self.assert_element("div#login_button_container")')
|
|
708
702
|
data.append("")
|
|
709
703
|
file_path = "%s/%s" % (dir_name_3, "swag_labs_test.py")
|
|
710
|
-
file =
|
|
704
|
+
file = open(file_path, "w+", "utf-8")
|
|
711
705
|
file.writelines("\r\n".join(data))
|
|
712
706
|
file.close()
|
|
713
707
|
|
|
@@ -734,7 +728,7 @@ def main():
|
|
|
734
728
|
data.append(' sb.assert_element("div#login_button_container")')
|
|
735
729
|
data.append("")
|
|
736
730
|
file_path = "%s/%s" % (dir_name_3, "sb_swag_test.py")
|
|
737
|
-
file =
|
|
731
|
+
file = open(file_path, "w+", "utf-8")
|
|
738
732
|
file.writelines("\r\n".join(data))
|
|
739
733
|
file.close()
|
|
740
734
|
|
|
@@ -761,7 +755,7 @@ def main():
|
|
|
761
755
|
data.append(" ├── sb_swag_test.py")
|
|
762
756
|
data.append(" └── swag_labs_test.py")
|
|
763
757
|
file_path = "%s/%s" % (dir_name, "outline.rst")
|
|
764
|
-
file =
|
|
758
|
+
file = open(file_path, "w+", "utf-8")
|
|
765
759
|
file.writelines("\r\n".join(data))
|
|
766
760
|
file.close()
|
|
767
761
|
if " " not in file_path:
|
|
@@ -40,7 +40,6 @@ Output:
|
|
|
40
40
|
BaseCase format supports Languages or Recorder Mode.
|
|
41
41
|
UC Mode automatically uses English with SB() format.
|
|
42
42
|
"""
|
|
43
|
-
import codecs
|
|
44
43
|
import colorama
|
|
45
44
|
import os
|
|
46
45
|
import sys
|
|
@@ -413,7 +412,7 @@ def main():
|
|
|
413
412
|
continue
|
|
414
413
|
new_data.append(line)
|
|
415
414
|
data = new_data
|
|
416
|
-
file =
|
|
415
|
+
file = open(file_path, "w+", "utf-8")
|
|
417
416
|
file.writelines("\r\n".join(data))
|
|
418
417
|
file.close()
|
|
419
418
|
if " " not in file_name:
|
|
@@ -22,7 +22,6 @@ Output:
|
|
|
22
22
|
and use "serif" theme with "slide" transition.
|
|
23
23
|
The slides can be used as a basic boilerplate.
|
|
24
24
|
"""
|
|
25
|
-
import codecs
|
|
26
25
|
import colorama
|
|
27
26
|
import os
|
|
28
27
|
import sys
|
|
@@ -273,7 +272,7 @@ def main():
|
|
|
273
272
|
continue
|
|
274
273
|
new_data.append(line)
|
|
275
274
|
data = new_data
|
|
276
|
-
file =
|
|
275
|
+
file = open(file_path, "w+", "utf-8")
|
|
277
276
|
file.writelines("\r\n".join(data))
|
|
278
277
|
file.close()
|
|
279
278
|
if " " not in file_name:
|
|
@@ -29,7 +29,6 @@ Output:
|
|
|
29
29
|
Creates a new SeleniumBase test using the Recorder.
|
|
30
30
|
If the filename already exists, an error is raised.
|
|
31
31
|
"""
|
|
32
|
-
import codecs
|
|
33
32
|
import colorama
|
|
34
33
|
import shutil
|
|
35
34
|
import os
|
|
@@ -240,7 +239,7 @@ def main():
|
|
|
240
239
|
d2.append("")
|
|
241
240
|
data = d2
|
|
242
241
|
|
|
243
|
-
file =
|
|
242
|
+
file = open(file_path, "w+", "utf-8")
|
|
244
243
|
file.writelines("\r\n".join(data))
|
|
245
244
|
file.close()
|
|
246
245
|
success = (
|
|
@@ -8,7 +8,6 @@ Output:
|
|
|
8
8
|
have been replaced with variable names defined in
|
|
9
9
|
"page_objects.py", supporting the Page Object Pattern.
|
|
10
10
|
"""
|
|
11
|
-
import codecs
|
|
12
11
|
import os
|
|
13
12
|
import re
|
|
14
13
|
import sys
|
|
@@ -136,7 +135,7 @@ def create_objects_file(selector_list_dict=None):
|
|
|
136
135
|
data.append(' html = "html"')
|
|
137
136
|
data.append("")
|
|
138
137
|
file_path = PAGE_OBJECTS_FILE
|
|
139
|
-
file =
|
|
138
|
+
file = open(file_path, "w+", "utf-8")
|
|
140
139
|
file.writelines("\r\n".join(data))
|
|
141
140
|
file.close()
|
|
142
141
|
if not selector_list_dict:
|
|
@@ -3189,7 +3188,7 @@ def main(shell_command):
|
|
|
3189
3188
|
# Create SeleniumBase test file
|
|
3190
3189
|
base_file_name = seleniumbase_file.split(".py")[0]
|
|
3191
3190
|
converted_file_name = base_file_name + ".py" # Change end to make a copy
|
|
3192
|
-
out_file =
|
|
3191
|
+
out_file = open(converted_file_name, "w+", encoding="utf-8")
|
|
3193
3192
|
out_file.writelines(seleniumbase_code)
|
|
3194
3193
|
out_file.close()
|
|
3195
3194
|
print('\n>>> ["%s"] was updated!\n' % converted_file_name)
|
|
@@ -2006,14 +2006,12 @@ def _repair_edgedriver(edge_version):
|
|
|
2006
2006
|
|
|
2007
2007
|
|
|
2008
2008
|
def _mark_driver_repaired():
|
|
2009
|
-
import codecs
|
|
2010
|
-
|
|
2011
2009
|
abs_path = os.path.abspath(".")
|
|
2012
2010
|
driver_repaired_lock = constants.MultiBrowser.DRIVER_REPAIRED
|
|
2013
2011
|
file_path = os.path.join(abs_path, driver_repaired_lock)
|
|
2014
2012
|
if not os.path.exists(DOWNLOADS_FOLDER):
|
|
2015
2013
|
os.makedirs(DOWNLOADS_FOLDER)
|
|
2016
|
-
out_file =
|
|
2014
|
+
out_file = open(file_path, "w+", encoding="utf-8")
|
|
2017
2015
|
out_file.writelines("")
|
|
2018
2016
|
out_file.close()
|
|
2019
2017
|
|
seleniumbase/core/log_helper.py
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import codecs
|
|
2
1
|
import os
|
|
3
2
|
import shutil
|
|
4
3
|
import sys
|
|
@@ -298,7 +297,7 @@ def log_test_failure_data(test, test_logpath, driver, browser, url=None):
|
|
|
298
297
|
with suppress(Exception):
|
|
299
298
|
os.makedirs(test_logpath)
|
|
300
299
|
with suppress(Exception):
|
|
301
|
-
log_file =
|
|
300
|
+
log_file = open(basic_file_path, "w+", encoding="utf-8")
|
|
302
301
|
log_file.writelines("\r\n".join(data_to_save))
|
|
303
302
|
log_file.close()
|
|
304
303
|
shared_utils.make_writable(basic_file_path)
|
|
@@ -353,7 +352,7 @@ def log_skipped_test_data(test, test_logpath, driver, browser, reason):
|
|
|
353
352
|
data_to_save.append("")
|
|
354
353
|
file_path = os.path.join(test_logpath, "skip_reason.txt")
|
|
355
354
|
with suppress(Exception):
|
|
356
|
-
log_file =
|
|
355
|
+
log_file = open(file_path, "w+", encoding="utf-8")
|
|
357
356
|
log_file.writelines("\r\n".join(data_to_save))
|
|
358
357
|
log_file.close()
|
|
359
358
|
shared_utils.make_writable(file_path)
|
|
@@ -388,7 +387,7 @@ def log_page_source(test_logpath, driver, source=None):
|
|
|
388
387
|
os.makedirs(test_logpath)
|
|
389
388
|
html_file_path = os.path.join(test_logpath, html_file_name)
|
|
390
389
|
with suppress(Exception):
|
|
391
|
-
html_file =
|
|
390
|
+
html_file = open(html_file_path, "w+", encoding="utf-8")
|
|
392
391
|
html_file.write(page_source)
|
|
393
392
|
html_file.close()
|
|
394
393
|
shared_utils.make_writable(html_file_path)
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import codecs
|
|
2
1
|
import os
|
|
3
2
|
import shutil
|
|
4
3
|
import sys
|
|
@@ -48,7 +47,7 @@ def save_test_failure_data(test, name, folder=None):
|
|
|
48
47
|
failure_data_file_path = os.path.join(file_path, name)
|
|
49
48
|
else:
|
|
50
49
|
failure_data_file_path = name
|
|
51
|
-
failure_data_file =
|
|
50
|
+
failure_data_file = open(failure_data_file_path, "w+", "utf-8")
|
|
52
51
|
data_to_save = []
|
|
53
52
|
if not hasattr(sb_config, "_report_test_id"):
|
|
54
53
|
exc_message = "(Unknown Exception)"
|
seleniumbase/core/sb_cdp.py
CHANGED
|
@@ -187,46 +187,23 @@ class CDPMethods():
|
|
|
187
187
|
element with the given tag. (Eg: a, button, div, script, span)"""
|
|
188
188
|
if not timeout:
|
|
189
189
|
timeout = settings.SMALL_TIMEOUT
|
|
190
|
-
self.__add_light_pause()
|
|
191
|
-
time_now = time.time()
|
|
192
|
-
self.assert_text(text, timeout=timeout)
|
|
193
|
-
spent = int(time.time() - time_now)
|
|
194
|
-
remaining = 1 + timeout - spent
|
|
195
|
-
if tag_name:
|
|
196
|
-
self.assert_element(tag_name, timeout=remaining)
|
|
197
|
-
elements = self.loop.run_until_complete(
|
|
198
|
-
self.page.find_elements_by_text(text=text)
|
|
199
|
-
)
|
|
200
190
|
if tag_name:
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
element
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
and text.strip() in element.parent.text
|
|
218
|
-
):
|
|
219
|
-
element = self.__add_sync_methods(element.parent)
|
|
220
|
-
return self.__add_sync_methods(element)
|
|
221
|
-
elif (
|
|
222
|
-
element
|
|
223
|
-
and element.parent
|
|
224
|
-
and element.parent.parent
|
|
225
|
-
and tag_name in element.parent.parent.tag_name.lower()
|
|
226
|
-
and text.strip() in element.parent.parent.text
|
|
227
|
-
):
|
|
228
|
-
element = self.__add_sync_methods(element.parent.parent)
|
|
229
|
-
return self.__add_sync_methods(element)
|
|
191
|
+
try:
|
|
192
|
+
return self.find_element(
|
|
193
|
+
'%s:contains("%s")' % (tag_name, text), timeout=timeout
|
|
194
|
+
)
|
|
195
|
+
except Exception:
|
|
196
|
+
pass # The exception will be raised later
|
|
197
|
+
else:
|
|
198
|
+
self.__add_light_pause()
|
|
199
|
+
self.assert_text(text, timeout=timeout)
|
|
200
|
+
elements = self.loop.run_until_complete(
|
|
201
|
+
self.page.find_elements_by_text(text=text)
|
|
202
|
+
)
|
|
203
|
+
for element in elements:
|
|
204
|
+
if element:
|
|
205
|
+
element = self.__add_sync_methods(element)
|
|
206
|
+
return self.__add_sync_methods(element)
|
|
230
207
|
plural = "s"
|
|
231
208
|
if timeout == 1:
|
|
232
209
|
plural = ""
|
|
@@ -2692,7 +2669,6 @@ class CDPMethods():
|
|
|
2692
2669
|
self.loop.run_until_complete(self.page.wait())
|
|
2693
2670
|
|
|
2694
2671
|
def save_page_source(self, name, folder=None):
|
|
2695
|
-
import codecs
|
|
2696
2672
|
from seleniumbase.core import log_helper
|
|
2697
2673
|
if not name.endswith(".html"):
|
|
2698
2674
|
name = name + ".html"
|
|
@@ -2718,7 +2694,7 @@ class CDPMethods():
|
|
|
2718
2694
|
rendered_source = "%s\n%s" % (base_href_html, page_source)
|
|
2719
2695
|
else:
|
|
2720
2696
|
rendered_source = page_source
|
|
2721
|
-
html_file =
|
|
2697
|
+
html_file = open(html_file_path, "w+", "utf-8")
|
|
2722
2698
|
html_file.write(rendered_source)
|
|
2723
2699
|
html_file.close()
|
|
2724
2700
|
|
seleniumbase/core/tour_helper.py
CHANGED
|
@@ -1134,10 +1134,9 @@ def export_tour(tour_steps, name=None, filename="my_tour.js", url=None):
|
|
|
1134
1134
|
os.makedirs(exported_tours_folder)
|
|
1135
1135
|
except Exception:
|
|
1136
1136
|
pass
|
|
1137
|
-
import codecs
|
|
1138
1137
|
|
|
1139
1138
|
file_path = exported_tours_folder + "/" + filename
|
|
1140
|
-
out_file =
|
|
1139
|
+
out_file = open(file_path, "w+", encoding="utf-8")
|
|
1141
1140
|
out_file.writelines(instructions)
|
|
1142
1141
|
out_file.close()
|
|
1143
1142
|
print("\n>>> [%s] was saved!\n" % file_path)
|
|
@@ -32,7 +32,6 @@ Improvements include making WebDriver more robust, reliable, and flexible.
|
|
|
32
32
|
Page elements are given enough time to load before WebDriver acts on them.
|
|
33
33
|
Code becomes greatly simplified and easier to maintain."""
|
|
34
34
|
|
|
35
|
-
import codecs
|
|
36
35
|
import colorama
|
|
37
36
|
import fasteners
|
|
38
37
|
import json
|
|
@@ -4683,7 +4682,7 @@ class BaseCase(unittest.TestCase):
|
|
|
4683
4682
|
if not os.path.exists(file_path):
|
|
4684
4683
|
os.makedirs(file_path)
|
|
4685
4684
|
cookies_file_path = os.path.join(file_path, name)
|
|
4686
|
-
cookies_file =
|
|
4685
|
+
cookies_file = open(cookies_file_path, "w+", encoding="utf-8")
|
|
4687
4686
|
cookies_file.writelines(json_cookies)
|
|
4688
4687
|
cookies_file.close()
|
|
4689
4688
|
|
|
@@ -5737,7 +5736,7 @@ class BaseCase(unittest.TestCase):
|
|
|
5737
5736
|
extra_file_name = "__init__.py"
|
|
5738
5737
|
extra_file_path = os.path.join(recordings_folder, extra_file_name)
|
|
5739
5738
|
if not os.path.exists(extra_file_path):
|
|
5740
|
-
out_file =
|
|
5739
|
+
out_file = open(extra_file_path, "w+", "utf-8")
|
|
5741
5740
|
out_file.writelines("\r\n".join(data))
|
|
5742
5741
|
out_file.close()
|
|
5743
5742
|
sys.stdout.write("\nCreated recordings%s__init__.py" % os.sep)
|
|
@@ -5785,7 +5784,7 @@ class BaseCase(unittest.TestCase):
|
|
|
5785
5784
|
extra_file_name = "pytest.ini"
|
|
5786
5785
|
extra_file_path = os.path.join(recordings_folder, extra_file_name)
|
|
5787
5786
|
if not os.path.exists(extra_file_path):
|
|
5788
|
-
out_file =
|
|
5787
|
+
out_file = open(extra_file_path, "w+", "utf-8")
|
|
5789
5788
|
out_file.writelines("\r\n".join(data))
|
|
5790
5789
|
out_file.close()
|
|
5791
5790
|
sys.stdout.write("\nCreated recordings%spytest.ini" % os.sep)
|
|
@@ -5806,7 +5805,7 @@ class BaseCase(unittest.TestCase):
|
|
|
5806
5805
|
extra_file_name = "setup.cfg"
|
|
5807
5806
|
extra_file_path = os.path.join(recordings_folder, extra_file_name)
|
|
5808
5807
|
if not os.path.exists(extra_file_path):
|
|
5809
|
-
out_file =
|
|
5808
|
+
out_file = open(extra_file_path, "w+", "utf-8")
|
|
5810
5809
|
out_file.writelines("\r\n".join(data))
|
|
5811
5810
|
out_file.close()
|
|
5812
5811
|
sys.stdout.write("\nCreated recordings%ssetup.cfg" % os.sep)
|
|
@@ -5824,7 +5823,7 @@ class BaseCase(unittest.TestCase):
|
|
|
5824
5823
|
elif context_filename:
|
|
5825
5824
|
file_name = context_filename
|
|
5826
5825
|
file_path = os.path.join(recordings_folder, file_name)
|
|
5827
|
-
out_file =
|
|
5826
|
+
out_file = open(file_path, "w+", "utf-8")
|
|
5828
5827
|
out_file.writelines("\r\n".join(data))
|
|
5829
5828
|
out_file.close()
|
|
5830
5829
|
rec_message = ">>> RECORDING SAVED as: "
|
|
@@ -5926,7 +5925,7 @@ class BaseCase(unittest.TestCase):
|
|
|
5926
5925
|
file_name = sb_config.behave_scenario.filename.replace(".", "_")
|
|
5927
5926
|
file_name = file_name.split("/")[-1].split("\\")[-1] + "_rec.feature"
|
|
5928
5927
|
file_path = os.path.join(features_folder, file_name)
|
|
5929
|
-
out_file =
|
|
5928
|
+
out_file = open(file_path, "w+", "utf-8")
|
|
5930
5929
|
out_file.writelines("\r\n".join(data))
|
|
5931
5930
|
out_file.close()
|
|
5932
5931
|
|
|
@@ -5964,7 +5963,7 @@ class BaseCase(unittest.TestCase):
|
|
|
5964
5963
|
file_name = "__init__.py"
|
|
5965
5964
|
file_path = os.path.join(features_folder, file_name)
|
|
5966
5965
|
if not os.path.exists(file_path):
|
|
5967
|
-
out_file =
|
|
5966
|
+
out_file = open(file_path, "w+", "utf-8")
|
|
5968
5967
|
out_file.writelines("\r\n".join(data))
|
|
5969
5968
|
out_file.close()
|
|
5970
5969
|
print("Created recordings/features/__init__.py")
|
|
@@ -5977,7 +5976,7 @@ class BaseCase(unittest.TestCase):
|
|
|
5977
5976
|
file_name = "behave.ini"
|
|
5978
5977
|
file_path = os.path.join(features_folder, file_name)
|
|
5979
5978
|
if not os.path.exists(file_path):
|
|
5980
|
-
out_file =
|
|
5979
|
+
out_file = open(file_path, "w+", "utf-8")
|
|
5981
5980
|
out_file.writelines("\r\n".join(data))
|
|
5982
5981
|
out_file.close()
|
|
5983
5982
|
print("Created recordings/features/behave.ini")
|
|
@@ -6016,7 +6015,7 @@ class BaseCase(unittest.TestCase):
|
|
|
6016
6015
|
file_name = "environment.py"
|
|
6017
6016
|
file_path = os.path.join(features_folder, file_name)
|
|
6018
6017
|
if not os.path.exists(file_path):
|
|
6019
|
-
out_file =
|
|
6018
|
+
out_file = open(file_path, "w+", "utf-8")
|
|
6020
6019
|
out_file.writelines("\r\n".join(data))
|
|
6021
6020
|
out_file.close()
|
|
6022
6021
|
print("Created recordings/features/environment.py")
|
|
@@ -6026,7 +6025,7 @@ class BaseCase(unittest.TestCase):
|
|
|
6026
6025
|
file_name = "__init__.py"
|
|
6027
6026
|
file_path = os.path.join(steps_folder, file_name)
|
|
6028
6027
|
if not os.path.exists(file_path):
|
|
6029
|
-
out_file =
|
|
6028
|
+
out_file = open(file_path, "w+", "utf-8")
|
|
6030
6029
|
out_file.writelines("\r\n".join(data))
|
|
6031
6030
|
out_file.close()
|
|
6032
6031
|
print("Created recordings/features/steps/__init__.py")
|
|
@@ -6037,7 +6036,7 @@ class BaseCase(unittest.TestCase):
|
|
|
6037
6036
|
file_name = "imported.py"
|
|
6038
6037
|
file_path = os.path.join(steps_folder, file_name)
|
|
6039
6038
|
if not os.path.exists(file_path):
|
|
6040
|
-
out_file =
|
|
6039
|
+
out_file = open(file_path, "w+", "utf-8")
|
|
6041
6040
|
out_file.writelines("\r\n".join(data))
|
|
6042
6041
|
out_file.close()
|
|
6043
6042
|
print("Created recordings/features/steps/imported.py")
|
|
@@ -10173,7 +10172,7 @@ class BaseCase(unittest.TestCase):
|
|
|
10173
10172
|
text = self.__get_type_checked_text(text)
|
|
10174
10173
|
selector, by = self.__recalculate_selector(selector, by)
|
|
10175
10174
|
if self.__is_cdp_swap_needed():
|
|
10176
|
-
return self.cdp.
|
|
10175
|
+
return self.cdp.wait_for_text(text, selector, timeout=timeout)
|
|
10177
10176
|
elif self.__is_shadow_selector(selector):
|
|
10178
10177
|
return self.__wait_for_shadow_text_visible(text, selector, timeout)
|
|
10179
10178
|
return page_actions.wait_for_text_visible(
|
|
@@ -10530,6 +10529,8 @@ class BaseCase(unittest.TestCase):
|
|
|
10530
10529
|
timeout = settings.LARGE_TIMEOUT
|
|
10531
10530
|
if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
|
|
10532
10531
|
timeout = self.__get_new_timeout(timeout)
|
|
10532
|
+
if self.__is_cdp_swap_needed():
|
|
10533
|
+
return self.cdp.find_element_by_text(text=link_text, tag_name="a")
|
|
10533
10534
|
return self.wait_for_element_visible(
|
|
10534
10535
|
link_text, by="link text", timeout=timeout
|
|
10535
10536
|
)
|
|
@@ -11076,7 +11077,7 @@ class BaseCase(unittest.TestCase):
|
|
|
11076
11077
|
return # Skip the rest when deferred visual asserts are used
|
|
11077
11078
|
the_html = visual_helper.get_sbs_html()
|
|
11078
11079
|
file_path = os.path.join(test_logpath, constants.SideBySide.HTML_FILE)
|
|
11079
|
-
out_file =
|
|
11080
|
+
out_file = open(file_path, "w+", encoding="utf-8")
|
|
11080
11081
|
out_file.writelines(the_html)
|
|
11081
11082
|
out_file.close()
|
|
11082
11083
|
|
|
@@ -11236,16 +11237,16 @@ class BaseCase(unittest.TestCase):
|
|
|
11236
11237
|
self.save_screenshot(
|
|
11237
11238
|
baseline_png, visual_baseline_path, selector="body"
|
|
11238
11239
|
)
|
|
11239
|
-
out_file =
|
|
11240
|
+
out_file = open(page_url_file, "w+", encoding="utf-8")
|
|
11240
11241
|
out_file.writelines(page_url)
|
|
11241
11242
|
out_file.close()
|
|
11242
|
-
out_file =
|
|
11243
|
+
out_file = open(level_1_file, "w+", encoding="utf-8")
|
|
11243
11244
|
out_file.writelines(json.dumps(level_1))
|
|
11244
11245
|
out_file.close()
|
|
11245
|
-
out_file =
|
|
11246
|
+
out_file = open(level_2_file, "w+", encoding="utf-8")
|
|
11246
11247
|
out_file.writelines(json.dumps(level_2))
|
|
11247
11248
|
out_file.close()
|
|
11248
|
-
out_file =
|
|
11249
|
+
out_file = open(level_3_file, "w+", encoding="utf-8")
|
|
11249
11250
|
out_file.writelines(json.dumps(level_3))
|
|
11250
11251
|
out_file.close()
|
|
11251
11252
|
|
|
@@ -11384,7 +11385,7 @@ class BaseCase(unittest.TestCase):
|
|
|
11384
11385
|
alpha_n_d_name = "".join([x if x.isalnum() else "_" for x in name])
|
|
11385
11386
|
side_by_side_name = "side_by_side_%s.html" % alpha_n_d_name
|
|
11386
11387
|
file_path = os.path.join(test_logpath, side_by_side_name)
|
|
11387
|
-
out_file =
|
|
11388
|
+
out_file = open(file_path, "w+", encoding="utf-8")
|
|
11388
11389
|
out_file.writelines(the_html)
|
|
11389
11390
|
out_file.close()
|
|
11390
11391
|
|
|
@@ -12069,7 +12070,7 @@ class BaseCase(unittest.TestCase):
|
|
|
12069
12070
|
with suppress(Exception):
|
|
12070
12071
|
os.makedirs(saved_presentations_folder)
|
|
12071
12072
|
file_path = os.path.join(saved_presentations_folder, filename)
|
|
12072
|
-
out_file =
|
|
12073
|
+
out_file = open(file_path, "w+", encoding="utf-8")
|
|
12073
12074
|
out_file.writelines(the_html)
|
|
12074
12075
|
out_file.close()
|
|
12075
12076
|
if self._output_file_saves:
|
|
@@ -12764,7 +12765,7 @@ class BaseCase(unittest.TestCase):
|
|
|
12764
12765
|
with suppress(Exception):
|
|
12765
12766
|
os.makedirs(saved_charts_folder)
|
|
12766
12767
|
file_path = os.path.join(saved_charts_folder, filename)
|
|
12767
|
-
out_file =
|
|
12768
|
+
out_file = open(file_path, "w+", encoding="utf-8")
|
|
12768
12769
|
out_file.writelines(the_html)
|
|
12769
12770
|
out_file.close()
|
|
12770
12771
|
if self._output_file_saves:
|
|
@@ -16046,7 +16047,7 @@ class BaseCase(unittest.TestCase):
|
|
|
16046
16047
|
test_id = test_id.replace(".py::", ".").replace("::", ".")
|
|
16047
16048
|
test_id = test_id.replace("/", ".").replace("\\", ".")
|
|
16048
16049
|
test_id = test_id.replace(" ", "_")
|
|
16049
|
-
# Linux filename length limit for `
|
|
16050
|
+
# Linux filename length limit for `open(filename)` = 255
|
|
16050
16051
|
# 255 - len("latest_logs/") - len("/basic_test_info.txt") = 223
|
|
16051
16052
|
if len(test_id) <= 223:
|
|
16052
16053
|
return test_id
|
|
@@ -16324,7 +16325,7 @@ class BaseCase(unittest.TestCase):
|
|
|
16324
16325
|
dash_pie = json.dumps(sb_config._saved_dashboard_pie)
|
|
16325
16326
|
dash_pie_loc = constants.Dashboard.DASH_PIE
|
|
16326
16327
|
pie_path = os.path.join(abs_path, dash_pie_loc)
|
|
16327
|
-
pie_file =
|
|
16328
|
+
pie_file = open(pie_path, "w+", encoding="utf-8")
|
|
16328
16329
|
pie_file.writelines(dash_pie)
|
|
16329
16330
|
pie_file.close()
|
|
16330
16331
|
DASH_PIE_PNG_1 = constants.Dashboard.get_dash_pie_1()
|
|
@@ -16484,7 +16485,7 @@ class BaseCase(unittest.TestCase):
|
|
|
16484
16485
|
)
|
|
16485
16486
|
abs_path = os.path.abspath(".")
|
|
16486
16487
|
file_path = os.path.join(abs_path, "dashboard.html")
|
|
16487
|
-
out_file =
|
|
16488
|
+
out_file = open(file_path, "w+", encoding="utf-8")
|
|
16488
16489
|
out_file.writelines(the_html)
|
|
16489
16490
|
out_file.close()
|
|
16490
16491
|
sb_config._dash_html = the_html
|
|
@@ -16497,7 +16498,7 @@ class BaseCase(unittest.TestCase):
|
|
|
16497
16498
|
dash_json = json.dumps((_results, _display_id, _rt, _tlp, d_stats))
|
|
16498
16499
|
dash_json_loc = constants.Dashboard.DASH_JSON
|
|
16499
16500
|
dash_jsonpath = os.path.join(abs_path, dash_json_loc)
|
|
16500
|
-
dash_json_file =
|
|
16501
|
+
dash_json_file = open(dash_jsonpath, "w+", encoding="utf-8")
|
|
16501
16502
|
dash_json_file.writelines(dash_json)
|
|
16502
16503
|
dash_json_file.close()
|
|
16503
16504
|
|
|
@@ -17,7 +17,6 @@ By.XPATH # "xpath"
|
|
|
17
17
|
By.TAG_NAME # "tag name"
|
|
18
18
|
By.PARTIAL_LINK_TEXT # "partial link text"
|
|
19
19
|
"""
|
|
20
|
-
import codecs
|
|
21
20
|
import os
|
|
22
21
|
import time
|
|
23
22
|
from contextlib import suppress
|
|
@@ -1531,7 +1530,7 @@ def save_page_source(driver, name, folder=None):
|
|
|
1531
1530
|
rendered_source = log_helper.get_html_source_with_base_href(
|
|
1532
1531
|
driver, page_source
|
|
1533
1532
|
)
|
|
1534
|
-
html_file =
|
|
1533
|
+
html_file = open(html_file_path, "w+", "utf-8")
|
|
1535
1534
|
html_file.write(rendered_source)
|
|
1536
1535
|
html_file.close()
|
|
1537
1536
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
"""This module contains useful utility methods"""
|
|
2
|
-
import codecs
|
|
3
2
|
import fasteners
|
|
4
3
|
import os
|
|
5
4
|
import re
|
|
@@ -314,7 +313,7 @@ def _save_data_as(data, destination_folder, file_name):
|
|
|
314
313
|
constants.MultiBrowser.FILE_IO_LOCK
|
|
315
314
|
)
|
|
316
315
|
with file_io_lock:
|
|
317
|
-
out_file =
|
|
316
|
+
out_file = open(
|
|
318
317
|
os.path.join(destination_folder, file_name), "w+", encoding="utf-8"
|
|
319
318
|
)
|
|
320
319
|
out_file.writelines(data)
|
|
@@ -332,7 +331,7 @@ def _append_data_to_file(data, destination_folder, file_name):
|
|
|
332
331
|
existing_data = f.read()
|
|
333
332
|
if not existing_data.split("\n")[-1] == "":
|
|
334
333
|
existing_data += "\n"
|
|
335
|
-
out_file =
|
|
334
|
+
out_file = open(
|
|
336
335
|
os.path.join(destination_folder, file_name), "w+", encoding="utf-8"
|
|
337
336
|
)
|
|
338
337
|
out_file.writelines("%s%s" % (existing_data, data))
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"""Test Info Plugin for SeleniumBase tests that run with pynose / nosetests"""
|
|
2
2
|
import os
|
|
3
|
-
import codecs
|
|
4
3
|
import time
|
|
5
4
|
import traceback
|
|
6
5
|
from nose.plugins import Plugin
|
|
@@ -26,7 +25,7 @@ class BasicTestInfo(Plugin):
|
|
|
26
25
|
if not os.path.exists(test_logpath):
|
|
27
26
|
os.makedirs(test_logpath)
|
|
28
27
|
file_name = "%s/%s" % (test_logpath, self.logfile_name)
|
|
29
|
-
basic_info_file =
|
|
28
|
+
basic_info_file = open(file_name, "w+", "utf-8")
|
|
30
29
|
self.__log_test_error_data(basic_info_file, test, err, "Error")
|
|
31
30
|
basic_info_file.close()
|
|
32
31
|
|
|
@@ -35,7 +34,7 @@ class BasicTestInfo(Plugin):
|
|
|
35
34
|
if not os.path.exists(test_logpath):
|
|
36
35
|
os.makedirs(test_logpath)
|
|
37
36
|
file_name = "%s/%s" % (test_logpath, self.logfile_name)
|
|
38
|
-
basic_info_file =
|
|
37
|
+
basic_info_file = open(file_name, "w+", "utf-8")
|
|
39
38
|
self.__log_test_error_data(basic_info_file, test, err, "Error")
|
|
40
39
|
basic_info_file.close()
|
|
41
40
|
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"""PageSource Plugin for SeleniumBase tests that run with pynose / nosetests"""
|
|
2
2
|
import os
|
|
3
|
-
import codecs
|
|
4
3
|
from nose.plugins import Plugin
|
|
5
4
|
from seleniumbase.config import settings
|
|
6
5
|
from seleniumbase.core import log_helper
|
|
@@ -29,7 +28,7 @@ class PageSource(Plugin):
|
|
|
29
28
|
if not os.path.exists(test_logpath):
|
|
30
29
|
os.makedirs(test_logpath)
|
|
31
30
|
html_file_name = os.path.join(test_logpath, self.logfile_name)
|
|
32
|
-
html_file =
|
|
31
|
+
html_file = open(html_file_name, "w+", "utf-8")
|
|
33
32
|
rendered_source = log_helper.get_html_source_with_base_href(
|
|
34
33
|
test.driver, page_source
|
|
35
34
|
)
|
|
@@ -45,7 +44,7 @@ class PageSource(Plugin):
|
|
|
45
44
|
if not os.path.exists(test_logpath):
|
|
46
45
|
os.makedirs(test_logpath)
|
|
47
46
|
html_file_name = os.path.join(test_logpath, self.logfile_name)
|
|
48
|
-
html_file =
|
|
47
|
+
html_file = open(html_file_name, "w+", "utf-8")
|
|
49
48
|
rendered_source = log_helper.get_html_source_with_base_href(
|
|
50
49
|
test.driver, page_source
|
|
51
50
|
)
|
|
@@ -1898,7 +1898,6 @@ def _get_test_ids_(the_item):
|
|
|
1898
1898
|
|
|
1899
1899
|
|
|
1900
1900
|
def _create_dashboard_assets_():
|
|
1901
|
-
import codecs
|
|
1902
1901
|
from seleniumbase.js_code.live_js import live_js
|
|
1903
1902
|
from seleniumbase.core.style_sheet import get_pytest_style
|
|
1904
1903
|
|
|
@@ -1916,7 +1915,7 @@ def _create_dashboard_assets_():
|
|
|
1916
1915
|
if existing_pytest_style == get_pytest_style():
|
|
1917
1916
|
add_pytest_style_css = False
|
|
1918
1917
|
if add_pytest_style_css:
|
|
1919
|
-
out_file =
|
|
1918
|
+
out_file = open(pytest_style_css, "w+", encoding="utf-8")
|
|
1920
1919
|
out_file.writelines(get_pytest_style())
|
|
1921
1920
|
out_file.close()
|
|
1922
1921
|
live_js_file = os.path.join(assets_folder, "live.js")
|
|
@@ -1928,7 +1927,7 @@ def _create_dashboard_assets_():
|
|
|
1928
1927
|
if existing_live_js == live_js:
|
|
1929
1928
|
add_live_js_file = False
|
|
1930
1929
|
if add_live_js_file:
|
|
1931
|
-
out_file =
|
|
1930
|
+
out_file = open(live_js_file, "w+", encoding="utf-8")
|
|
1932
1931
|
out_file.writelines(live_js)
|
|
1933
1932
|
out_file.close()
|
|
1934
1933
|
|
|
@@ -27,7 +27,6 @@ Output:
|
|
|
27
27
|
(Example: Translating "test_1.py" into Japanese with
|
|
28
28
|
"-c" will create a new file called "test_1_ja.py".)
|
|
29
29
|
"""
|
|
30
|
-
import codecs
|
|
31
30
|
import colorama
|
|
32
31
|
import os
|
|
33
32
|
import re
|
|
@@ -1043,7 +1042,7 @@ def main():
|
|
|
1043
1042
|
pass # Print-only run already done
|
|
1044
1043
|
|
|
1045
1044
|
if new_file_name:
|
|
1046
|
-
out_file =
|
|
1045
|
+
out_file = open(new_file_name, "w+", encoding="utf-8")
|
|
1047
1046
|
out_file.writelines("\r\n".join(seleniumbase_lines))
|
|
1048
1047
|
out_file.close()
|
|
1049
1048
|
results_saved = (
|
|
@@ -369,7 +369,8 @@ class Browser:
|
|
|
369
369
|
proxy_user = username_and_password.split(":")[0]
|
|
370
370
|
proxy_pass = username_and_password.split(":")[1]
|
|
371
371
|
await connection.set_auth(proxy_user, proxy_pass, self.tabs[0])
|
|
372
|
-
time.sleep(0.
|
|
372
|
+
time.sleep(0.22)
|
|
373
|
+
await connection.sleep(0.05)
|
|
373
374
|
frame_id, loader_id, *_ = await connection.send(
|
|
374
375
|
cdp.page.navigate(url)
|
|
375
376
|
)
|
|
@@ -520,8 +520,6 @@ class Connection(metaclass=CantTouchThis):
|
|
|
520
520
|
except BaseException:
|
|
521
521
|
logger.debug("NOT GOOD", exc_info=True)
|
|
522
522
|
continue
|
|
523
|
-
finally:
|
|
524
|
-
continue
|
|
525
523
|
for ed in enabled_domains:
|
|
526
524
|
# Items still present at this point are unused and need removal.
|
|
527
525
|
self.enabled_domains.remove(ed)
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import codecs
|
|
2
1
|
import os
|
|
3
2
|
import subprocess
|
|
4
3
|
import sys
|
|
@@ -78,7 +77,7 @@ def main():
|
|
|
78
77
|
data = []
|
|
79
78
|
data.append(verbose)
|
|
80
79
|
file_path = os.path.join(dir_path, "verbose_hub_server.dat")
|
|
81
|
-
file =
|
|
80
|
+
file = open(file_path, "w+", "utf-8")
|
|
82
81
|
file.writelines("\r\n".join(data))
|
|
83
82
|
file.close()
|
|
84
83
|
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import codecs
|
|
2
1
|
import os
|
|
3
2
|
import subprocess
|
|
4
3
|
import sys
|
|
@@ -88,14 +87,14 @@ def main():
|
|
|
88
87
|
data = []
|
|
89
88
|
data.append(server_ip)
|
|
90
89
|
file_path = os.path.join(dir_path, "ip_of_grid_hub.dat")
|
|
91
|
-
file =
|
|
90
|
+
file = open(file_path, "w+", "utf-8")
|
|
92
91
|
file.writelines("\r\n".join(data))
|
|
93
92
|
file.close()
|
|
94
93
|
|
|
95
94
|
data = []
|
|
96
95
|
data.append(verbose)
|
|
97
96
|
file_path = os.path.join(dir_path, "verbose_node_server.dat")
|
|
98
|
-
file =
|
|
97
|
+
file = open(file_path, "w+", "utf-8")
|
|
99
98
|
file.writelines("\r\n".join(data))
|
|
100
99
|
file.close()
|
|
101
100
|
|
|
@@ -8,7 +8,6 @@ Usage:
|
|
|
8
8
|
Output:
|
|
9
9
|
[NEW_FILE_SB].py (adds "_SB" to the original file name)
|
|
10
10
|
(the original file is kept intact)"""
|
|
11
|
-
import codecs
|
|
12
11
|
import re
|
|
13
12
|
import sys
|
|
14
13
|
from seleniumbase.fixtures import js_utils
|
|
@@ -894,7 +893,7 @@ def main():
|
|
|
894
893
|
# Create SeleniumBase test file
|
|
895
894
|
base_file_name = webdriver_python_file.split(".py")[0]
|
|
896
895
|
converted_file_name = base_file_name + "_SB.py"
|
|
897
|
-
out_file =
|
|
896
|
+
out_file = open(converted_file_name, "w+", encoding="utf-8")
|
|
898
897
|
out_file.writelines(seleniumbase_code)
|
|
899
898
|
out_file.close()
|
|
900
899
|
print(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: seleniumbase
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.43.1
|
|
4
4
|
Summary: A complete web automation framework for end-to-end testing.
|
|
5
5
|
Home-page: https://github.com/seleniumbase/SeleniumBase
|
|
6
6
|
Author: Michael Mintz
|
|
@@ -113,12 +113,13 @@ Requires-Dist: websocket-client~=1.8.0; python_version < "3.9"
|
|
|
113
113
|
Requires-Dist: websocket-client~=1.9.0; python_version >= "3.9"
|
|
114
114
|
Requires-Dist: selenium==4.27.1; python_version < "3.9"
|
|
115
115
|
Requires-Dist: selenium==4.32.0; python_version >= "3.9" and python_version < "3.10"
|
|
116
|
-
Requires-Dist: selenium==4.
|
|
116
|
+
Requires-Dist: selenium==4.37.0; python_version >= "3.10"
|
|
117
117
|
Requires-Dist: cssselect==1.2.0; python_version < "3.9"
|
|
118
118
|
Requires-Dist: cssselect==1.3.0; python_version >= "3.9"
|
|
119
119
|
Requires-Dist: sortedcontainers==2.4.0
|
|
120
120
|
Requires-Dist: execnet==2.1.1
|
|
121
|
-
Requires-Dist: iniconfig==2.1.0
|
|
121
|
+
Requires-Dist: iniconfig==2.1.0; python_version < "3.10"
|
|
122
|
+
Requires-Dist: iniconfig==2.3.0; python_version >= "3.10"
|
|
122
123
|
Requires-Dist: pluggy==1.5.0; python_version < "3.9"
|
|
123
124
|
Requires-Dist: pluggy==1.6.0; python_version >= "3.9"
|
|
124
125
|
Requires-Dist: pytest==8.3.5; python_version < "3.9"
|
|
@@ -171,7 +172,7 @@ Provides-Extra: pdfminer
|
|
|
171
172
|
Requires-Dist: pdfminer.six==20250324; python_version < "3.9" and extra == "pdfminer"
|
|
172
173
|
Requires-Dist: pdfminer.six==20250506; python_version >= "3.9" and extra == "pdfminer"
|
|
173
174
|
Requires-Dist: cryptography==39.0.2; python_version < "3.9" and extra == "pdfminer"
|
|
174
|
-
Requires-Dist: cryptography==46.0.
|
|
175
|
+
Requires-Dist: cryptography==46.0.3; python_version >= "3.9" and extra == "pdfminer"
|
|
175
176
|
Requires-Dist: cffi==1.17.1; python_version < "3.9" and extra == "pdfminer"
|
|
176
177
|
Requires-Dist: cffi==2.0.0; python_version >= "3.9" and extra == "pdfminer"
|
|
177
178
|
Requires-Dist: pycparser==2.22; python_version < "3.9" and extra == "pdfminer"
|
|
@@ -229,9 +230,10 @@ Dynamic: summary
|
|
|
229
230
|
|
|
230
231
|
<p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb3.png" alt="SeleniumBase" title="SeleniumBase" width="350" /></a></p>
|
|
231
232
|
|
|
232
|
-
<p align="center" class="hero__title"><b>
|
|
233
|
+
<p align="center" class="hero__title"><b>Automate, test, and scrape the web — on your own terms.<br /></b></p>
|
|
233
234
|
|
|
234
|
-
<p align="center"><a href="https://pypi.python.org/pypi/seleniumbase" target="_blank"><img src="https://img.shields.io/pypi/v/seleniumbase.svg?color=3399EE" alt="PyPI version" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/releases" target="_blank"><img src="https://img.shields.io/github/v/release/seleniumbase/SeleniumBase.svg?color=22AAEE" alt="GitHub version" /></a> <a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg" alt="SeleniumBase Docs" /></a
|
|
235
|
+
<p align="center"><a href="https://pypi.python.org/pypi/seleniumbase" target="_blank"><img src="https://img.shields.io/pypi/v/seleniumbase.svg?color=3399EE" alt="PyPI version" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/releases" target="_blank"><img src="https://img.shields.io/github/v/release/seleniumbase/SeleniumBase.svg?color=22AAEE" alt="GitHub version" /></a> <a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg" alt="SeleniumBase Docs" /></a></p>
|
|
236
|
+
<p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/actions" target="_blank"><img src="https://github.com/seleniumbase/SeleniumBase/workflows/CI%20build/badge.svg" alt="SeleniumBase GitHub Actions" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/stargazers"><img src="https://img.shields.io/github/stars/seleniumbase/SeleniumBase?style=social"></a> <a href="https://pepy.tech/projects/seleniumbase?timeRange=threeMonths&category=version&includeCIDownloads=true&granularity=daily&viewType=line&versions=*" target="_blank"><img src="https://static.pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" /></a> <a href="https://discord.gg/EdhQTn3EyE" target="_blank"><img src="https://img.shields.io/discord/727927627830001734?color=7289DA&label=Discord&logo=discord&logoColor=white"/></a></p>
|
|
235
237
|
|
|
236
238
|
<p align="center">
|
|
237
239
|
<a href="#python_installation">🚀 Start</a> |
|
|
@@ -271,7 +273,7 @@ Dynamic: summary
|
|
|
271
273
|
<br />
|
|
272
274
|
</p>
|
|
273
275
|
|
|
274
|
-
<p>SeleniumBase is
|
|
276
|
+
<p>SeleniumBase is a browser automation framework for the modern web. Both new and experienced Python users alike can easily get started. With special stealth features like UC Mode and CDP Mode, you'll be evading bot-detection and bypassing CAPTCHAs in minutes.</p>
|
|
275
277
|
|
|
276
278
|
--------
|
|
277
279
|
|
|
@@ -545,7 +547,6 @@ pip install seleniumbase
|
|
|
545
547
|
|
|
546
548
|
* (Add ``--upgrade`` OR ``-U`` to upgrade SeleniumBase.)
|
|
547
549
|
* (Add ``--force-reinstall`` to upgrade indirect packages.)
|
|
548
|
-
* (Use ``pip3`` if multiple versions of Python are present.)
|
|
549
550
|
|
|
550
551
|
🔵 **How to install ``seleniumbase`` from a GitHub clone:**
|
|
551
552
|
|
|
@@ -619,10 +620,10 @@ pip install -e .
|
|
|
619
620
|
<summary> ▶️ Here's sample output from a chromedriver download. (<b>click to expand</b>)</summary>
|
|
620
621
|
|
|
621
622
|
```zsh
|
|
622
|
-
*** chromedriver to download =
|
|
623
|
+
*** chromedriver to download = 141.0.7390.78 (Latest Stable)
|
|
623
624
|
|
|
624
625
|
Downloading chromedriver-mac-arm64.zip from:
|
|
625
|
-
https://storage.googleapis.com/chrome-for-testing-public/
|
|
626
|
+
https://storage.googleapis.com/chrome-for-testing-public/141.0.7390.78/mac-arm64/chromedriver-mac-arm64.zip ...
|
|
626
627
|
Download Complete!
|
|
627
628
|
|
|
628
629
|
Extracting ['chromedriver'] from chromedriver-mac-arm64.zip ...
|
|
@@ -632,8 +633,8 @@ The file [chromedriver] was saved to:
|
|
|
632
633
|
~/github/SeleniumBase/seleniumbase/drivers/
|
|
633
634
|
chromedriver
|
|
634
635
|
|
|
635
|
-
Making [chromedriver
|
|
636
|
-
[chromedriver
|
|
636
|
+
Making [chromedriver 141.0.7390.78] executable ...
|
|
637
|
+
[chromedriver 141.0.7390.78] is now ready for use!
|
|
637
638
|
```
|
|
638
639
|
|
|
639
640
|
</details>
|
|
@@ -3,10 +3,10 @@ sbase/__main__.py,sha256=G0bVB1-DM4PGwQ1KyOupaWCs4ePbChZNNWuX2htim5U,647
|
|
|
3
3
|
sbase/steps.py,sha256=wiPSWZhFpBlWvkqXRJ18btpBu3nQaw9K5AzIJNAX5RM,43521
|
|
4
4
|
seleniumbase/__init__.py,sha256=JFEY9P5QJqsa1M6ghzLMH2eIPQyh85iglCaQwg8Y8z4,2498
|
|
5
5
|
seleniumbase/__main__.py,sha256=dn1p6dgCchmcH1zzTzzQvFwwdQQqnTGH6ULV9m4hv24,654
|
|
6
|
-
seleniumbase/__version__.py,sha256=
|
|
6
|
+
seleniumbase/__version__.py,sha256=vue7pKsHtqCUSzZs8f5kCHobDgr7w5rh8BZDiklGLak,46
|
|
7
7
|
seleniumbase/behave/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
8
|
seleniumbase/behave/behave_helper.py,sha256=lJtagtivSbEpbRj0EKV4l4PuPU6NANONJJAnYwgVCe0,24379
|
|
9
|
-
seleniumbase/behave/behave_sb.py,sha256=
|
|
9
|
+
seleniumbase/behave/behave_sb.py,sha256=0ouNKGmSJ-SxOvDO_lQs5JjB0zw34tyHDOmf6sN9z3Q,59840
|
|
10
10
|
seleniumbase/behave/steps.py,sha256=8-N-NB2tnDsxaP4LSg-uSBgbwZYMS6ZEL1oggO1PCoU,390
|
|
11
11
|
seleniumbase/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
12
|
seleniumbase/common/decorators.py,sha256=js9TmhMsEtI_-obumjVWtNwG6AfXT6J2vIpK1RFd1Ps,7968
|
|
@@ -23,20 +23,20 @@ seleniumbase/console_scripts/logo_helper.py,sha256=ZqS9TAwpcu5mM5ll-a0wTbXLs2Sbc
|
|
|
23
23
|
seleniumbase/console_scripts/rich_helper.py,sha256=U_zvXpalxVV8rtg8c8EnNNmnh45tii3AV5ZV3O3KbGA,2234
|
|
24
24
|
seleniumbase/console_scripts/run.py,sha256=scHfo8Zf6F7ABAGBiKHF-Vv7MOrB6qU75RRiywjDYEg,58672
|
|
25
25
|
seleniumbase/console_scripts/sb_behave_gui.py,sha256=CX5dTIIptsaR1xLVy53DM6haV_mIc3kYALUkkhAkfRI,14888
|
|
26
|
-
seleniumbase/console_scripts/sb_caseplans.py,sha256=
|
|
26
|
+
seleniumbase/console_scripts/sb_caseplans.py,sha256=D3tM4KyiX--9y6ztyOnA5KiAlkF9IpZXfiNhuM41WvQ,17847
|
|
27
27
|
seleniumbase/console_scripts/sb_commander.py,sha256=Ejal4WhnMSTLcykCT04jmMuH_fvDrfIAoxoJ23LclAM,13084
|
|
28
28
|
seleniumbase/console_scripts/sb_install.py,sha256=LosIv69jk2k6bNdcB1ozUjV0vZ4lWyUBr8xM2UpSz5g,56401
|
|
29
|
-
seleniumbase/console_scripts/sb_mkchart.py,sha256=
|
|
30
|
-
seleniumbase/console_scripts/sb_mkdir.py,sha256=
|
|
31
|
-
seleniumbase/console_scripts/sb_mkfile.py,sha256=
|
|
32
|
-
seleniumbase/console_scripts/sb_mkpres.py,sha256=
|
|
33
|
-
seleniumbase/console_scripts/sb_mkrec.py,sha256=
|
|
34
|
-
seleniumbase/console_scripts/sb_objectify.py,sha256=
|
|
29
|
+
seleniumbase/console_scripts/sb_mkchart.py,sha256=pVAjLYxA9p4PeB45qXCHN_n-dVe7WuvOSMlXeI8V_dk,10920
|
|
30
|
+
seleniumbase/console_scripts/sb_mkdir.py,sha256=r5shfCksiicsT4zb-5Xram9nvBsKgZISgoKTQra4G_Q,30559
|
|
31
|
+
seleniumbase/console_scripts/sb_mkfile.py,sha256=l6NkkUL1PxGKWOaa9en4Azovm6PrKfx-eoccSeklaLo,17723
|
|
32
|
+
seleniumbase/console_scripts/sb_mkpres.py,sha256=7uxW87W_9yVdyJh_f2CDIV3pm1PFtFrF1SwMkw2FyHc,10994
|
|
33
|
+
seleniumbase/console_scripts/sb_mkrec.py,sha256=R2RlIX2mcX8x3AAI3vcXz_9rANmql7WGmf74bTvtl94,11991
|
|
34
|
+
seleniumbase/console_scripts/sb_objectify.py,sha256=LMFEPO9xxREhNin1ardMTZ_QCgkrZzsy4Q-tZUsPljI,121992
|
|
35
35
|
seleniumbase/console_scripts/sb_print.py,sha256=tNy-bMDgwHJO3bZxMpmo9weSE8uhbH0CUpP4VZqWxvI,30558
|
|
36
36
|
seleniumbase/console_scripts/sb_recorder.py,sha256=DH-n2fN7N9qyHMl7wjtn8MiliBgfw-1kwgmfg1GUuhk,10772
|
|
37
37
|
seleniumbase/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
38
38
|
seleniumbase/core/application_manager.py,sha256=e_0sjtI8cjY5BNyZj1QBR0j6_oCScxGmSXYEpcYwuZE,576
|
|
39
|
-
seleniumbase/core/browser_launcher.py,sha256=
|
|
39
|
+
seleniumbase/core/browser_launcher.py,sha256=tBsPVFvI1fruxUI9xSRZc9TGAfFL1cPHv3qxfJLWHXg,250991
|
|
40
40
|
seleniumbase/core/capabilities_parser.py,sha256=meIS2uHapTCq2ldfNAToC7r0cKmZDRXuYNKExM1GHDY,6038
|
|
41
41
|
seleniumbase/core/colored_traceback.py,sha256=DrRWfg7XEnKcgY59Xj7Jdk09H-XqHYBSUpB-DiZt6iY,2020
|
|
42
42
|
seleniumbase/core/create_db_tables.sql,sha256=VWPtrdiW_HQ6yETHjqTu-VIrTwvd8I8o1NfBeaVSHpU,972
|
|
@@ -44,19 +44,19 @@ seleniumbase/core/detect_b_ver.py,sha256=pqL_OjsAutvQEsr5KbYTqoKkYP6dtnPSxLhsxlO
|
|
|
44
44
|
seleniumbase/core/download_helper.py,sha256=qSR54kQISucF4RQaLCOuuerSu6DR41juGi_30HVvWYY,2943
|
|
45
45
|
seleniumbase/core/encoded_images.py,sha256=rDKJ4cNJSuKiRcFViYU7bjyTS9_moI57gUPRXVg3u2k,14209
|
|
46
46
|
seleniumbase/core/jqc_helper.py,sha256=2DDQr9Q2jSSZqFzX588jLlUM9oJvyrRWq2aORSIPUdI,10322
|
|
47
|
-
seleniumbase/core/log_helper.py,sha256=
|
|
47
|
+
seleniumbase/core/log_helper.py,sha256=5PlUzsmRCr3vVk1Zmp4Nc5rWU7ZZ9Nmk-xwf780Oxu8,23577
|
|
48
48
|
seleniumbase/core/mysql.py,sha256=X1McqBWCzN9DndyBbNrVg9_kvtaByVhodiXYkGbn36A,3955
|
|
49
49
|
seleniumbase/core/proxy_helper.py,sha256=pZ1NboNfziHU3vWZLOZLX-qkfM3oKSnpc3omQf9EUQQ,8809
|
|
50
50
|
seleniumbase/core/recorder_helper.py,sha256=gDION28OK4NAYsE-7ohKZ9Z3sxQQ0FEjf859LDpqsg4,25320
|
|
51
|
-
seleniumbase/core/report_helper.py,sha256=
|
|
51
|
+
seleniumbase/core/report_helper.py,sha256=Zp_B1bG3OPhGp9qqtDTdCLMjOnOehToBzogCCwzzd0g,12180
|
|
52
52
|
seleniumbase/core/s3_manager.py,sha256=z_4qx2jI_gtK5r3niGXgEOBpfMUicUCOciowai50MP4,3529
|
|
53
|
-
seleniumbase/core/sb_cdp.py,sha256=
|
|
53
|
+
seleniumbase/core/sb_cdp.py,sha256=KtR8uPl4Z8tcCkpiMBD8kPZaWXEmbtD26TCpJwV1KdU,107814
|
|
54
54
|
seleniumbase/core/sb_driver.py,sha256=-IQsskc7HpXQbcBL04IPjmGpyYchyo7v9OPF2WcahDw,14159
|
|
55
55
|
seleniumbase/core/session_helper.py,sha256=s9zD3PVZEWVzG2h81cCUskbNWLfdjC_LwwQjKptHCak,558
|
|
56
56
|
seleniumbase/core/settings_parser.py,sha256=gqVohHVlE_5L5Cqe2L24uYrRzvoK-saX8E_Df7_-_3I,7609
|
|
57
57
|
seleniumbase/core/style_sheet.py,sha256=5qYN5GLk4gkwg7nqp3h0XH5YXRijANzKDuEdalzccuw,11714
|
|
58
58
|
seleniumbase/core/testcase_manager.py,sha256=TblCfo8Zfap1Bayip-qTu9gqT-KALSwXAX4awBpnEHg,4633
|
|
59
|
-
seleniumbase/core/tour_helper.py,sha256=
|
|
59
|
+
seleniumbase/core/tour_helper.py,sha256=FDFuqiXqDPU2FfjJlA59jS9GJDp5x257Sv6dtVkKNgo,42530
|
|
60
60
|
seleniumbase/core/visual_helper.py,sha256=HxPOulfEebc9ZSwe7E-nSQJ12N2l4vhqUQubLvE2QQw,3227
|
|
61
61
|
seleniumbase/drivers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
62
62
|
seleniumbase/drivers/cft_drivers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -67,13 +67,13 @@ seleniumbase/extensions/disable_csp.zip,sha256=5RvomXnm2PdivUVcxTV6jfvD8WhTEsQYH
|
|
|
67
67
|
seleniumbase/extensions/recorder.zip,sha256=JEE_FVEvlS63cFQbVLEroIyPSS91nWCDL0MhjVrmIpk,11813
|
|
68
68
|
seleniumbase/extensions/sbase_ext.zip,sha256=3s1N8zrVaMz8RQEOIoBzC3KDjtmHwVZRvVsX25Odr_s,8175
|
|
69
69
|
seleniumbase/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
70
|
-
seleniumbase/fixtures/base_case.py,sha256=
|
|
70
|
+
seleniumbase/fixtures/base_case.py,sha256=NbQNMpYCLDNLz3OMBh8eKRu0SHhAKD1Kvci-ZrvZbEw,741284
|
|
71
71
|
seleniumbase/fixtures/constants.py,sha256=WMrItuNyKq3XVJ64NluLIRc4gJCxDw8K8qXED0b9S2w,13752
|
|
72
72
|
seleniumbase/fixtures/css_to_xpath.py,sha256=9ouDB1xl4MJ2os6JOgTIAyHKOQfuxtxvXC3O5hSnEKA,1954
|
|
73
73
|
seleniumbase/fixtures/errors.py,sha256=KyxuEVx_e3MPhVrJfNIa_3ltMpbCFxfy_jxK8RFNTns,555
|
|
74
74
|
seleniumbase/fixtures/js_utils.py,sha256=waXwlyMx7-rIFI8mJ_R8cL_mvih_gXlcJ_wT5h38HbI,52517
|
|
75
|
-
seleniumbase/fixtures/page_actions.py,sha256=
|
|
76
|
-
seleniumbase/fixtures/page_utils.py,sha256=
|
|
75
|
+
seleniumbase/fixtures/page_actions.py,sha256=QV5VPNoa8djy7CpThtqk5c2rKBqNPscFJRIpaLE_3no,73192
|
|
76
|
+
seleniumbase/fixtures/page_utils.py,sha256=2Mk7WCw659KRh-403teniQtpAHm2Nk0408LEIilZ9g4,12132
|
|
77
77
|
seleniumbase/fixtures/shared_utils.py,sha256=kn0rcF0tEkQkiT8RGVooNFsLnVWmdPeTH9PfIm86TOI,10527
|
|
78
78
|
seleniumbase/fixtures/unittest_helper.py,sha256=sfZ92rZeBAn_sF_yQ3I6_I7h3lyU5-cV_UMegBNoEm8,1294
|
|
79
79
|
seleniumbase/fixtures/words.py,sha256=FOA4mAYvl3EPVpBTvgvK6YwCL8BdlRCmed685kEe7Vg,7827
|
|
@@ -86,11 +86,11 @@ seleniumbase/masterqa/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
|
|
|
86
86
|
seleniumbase/masterqa/master_qa.py,sha256=jLWmAx32Rnu1IhmvrRt8BbsUIcDW5xYj2ouVozny-Y4,19258
|
|
87
87
|
seleniumbase/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
88
88
|
seleniumbase/plugins/base_plugin.py,sha256=ItLgtaZmu_363iycy8BNX0Do5LyIWGiTMLW6krXM-WQ,14748
|
|
89
|
-
seleniumbase/plugins/basic_test_info.py,sha256=
|
|
89
|
+
seleniumbase/plugins/basic_test_info.py,sha256=jsUCnCxIJmBSGmfCRe9-vViRQUSgRaviShbXwOYozgw,2080
|
|
90
90
|
seleniumbase/plugins/db_reporting_plugin.py,sha256=En09qUCoojrk9-vbcnsoHdSELoGmag2GDIyu3jTiJas,7331
|
|
91
91
|
seleniumbase/plugins/driver_manager.py,sha256=VSYQgDDA2t34gi-3qPkw5Ef9SX8sVQX3RETHOihyKHc,36558
|
|
92
|
-
seleniumbase/plugins/page_source.py,sha256=
|
|
93
|
-
seleniumbase/plugins/pytest_plugin.py,sha256=
|
|
92
|
+
seleniumbase/plugins/page_source.py,sha256=xOJoVVZJuzTCI1IAg7L_zXh2PZNb_bT7iTpMcw-XmoU,1861
|
|
93
|
+
seleniumbase/plugins/pytest_plugin.py,sha256=h87fbcyuHa_7CT4yvbKCN5BqTWkcRp9vhorQRZHh1aM,108901
|
|
94
94
|
seleniumbase/plugins/s3_logging_plugin.py,sha256=WDfertQgGOW_SRJpFMaekYD6vBVW9VO62POtXXy2HCM,2319
|
|
95
95
|
seleniumbase/plugins/sb_manager.py,sha256=ulTDorccan06eVYtSqlX26EFKXmS0gCY0huJ67Q5gTY,58082
|
|
96
96
|
seleniumbase/plugins/screen_shots.py,sha256=1hrXw-hzuZ1BR6Yh7AyWX2ABnvnP73-RCbwdz958gj4,1127
|
|
@@ -107,7 +107,7 @@ seleniumbase/translate/master_dict.py,sha256=LJxFoQN7qZ32Dp9dtcM5DymtAJw5ycfJsJH
|
|
|
107
107
|
seleniumbase/translate/portuguese.py,sha256=x3P4qxp56UiI41GoaL7JbUvFRYsgXU1EKjTgrt2GFtM,25369
|
|
108
108
|
seleniumbase/translate/russian.py,sha256=TyN9n0b4GRWDEYnHRGw1rfNAscdDmP3F3Y3aySM3C7s,27978
|
|
109
109
|
seleniumbase/translate/spanish.py,sha256=hh3xgW1Pq122SHYVvJAxFaXhFrjniOVncVbJbfWqOUM,25528
|
|
110
|
-
seleniumbase/translate/translator.py,sha256=
|
|
110
|
+
seleniumbase/translate/translator.py,sha256=bvX4ZEGc-8Ew5cQcrmwlux-Z6xN_BLqaNmSZhkhToG4,49217
|
|
111
111
|
seleniumbase/undetected/__init__.py,sha256=x744Ug70_-rd31TT7SI49T6Af0C2Ne_SbzF8XKPB8zw,27065
|
|
112
112
|
seleniumbase/undetected/cdp.py,sha256=G6nLStm1l8PmZlKIyMnFcYMV7HD5kiGb-9BaqPjVP3I,5497
|
|
113
113
|
seleniumbase/undetected/dprocess.py,sha256=83EV8ZHJWHG1TSUv9JNClBhdgiBXlkCc6mJ--HsoP3k,1681
|
|
@@ -117,10 +117,10 @@ seleniumbase/undetected/reactor.py,sha256=NropaXcO54pzmDq6quR27qPJxab6636H7LRAaq
|
|
|
117
117
|
seleniumbase/undetected/webelement.py,sha256=OOpUYbEiOG52KsYYyuDW9tYLdA2SMnukvwQHUdPVn9E,1389
|
|
118
118
|
seleniumbase/undetected/cdp_driver/__init__.py,sha256=Ga9alwuaZZy4_XOShc0HjgFnNqpPdrcbjAicz5gE7a4,215
|
|
119
119
|
seleniumbase/undetected/cdp_driver/_contradict.py,sha256=lP4b0h5quAy573ETn_TBbYV889cL1AuPLVInpJ0ZkiU,3183
|
|
120
|
-
seleniumbase/undetected/cdp_driver/browser.py,sha256=
|
|
120
|
+
seleniumbase/undetected/cdp_driver/browser.py,sha256=AQI6uWVyhv7VEnx0CE3V9MeoUa-VDilFPytnQile31Y,35651
|
|
121
121
|
seleniumbase/undetected/cdp_driver/cdp_util.py,sha256=XpzaUAbTL-4IciQ984x9QvA9HgYFzRlYrRv94fIfbpM,33918
|
|
122
122
|
seleniumbase/undetected/cdp_driver/config.py,sha256=B5Wf0E5xvCmIuLO_Y06oyKYd04yM2auj--JyGKUKsls,13630
|
|
123
|
-
seleniumbase/undetected/cdp_driver/connection.py,sha256=
|
|
123
|
+
seleniumbase/undetected/cdp_driver/connection.py,sha256=i_2JqJ53fA5lGUSp8EbJ-R61hw0Z_-2N5TzD7ZVPqow,25661
|
|
124
124
|
seleniumbase/undetected/cdp_driver/element.py,sha256=FIC6v7OmumLCT-_vIc3H4oju_oBbaLpWJUJIKm2c_q4,40467
|
|
125
125
|
seleniumbase/undetected/cdp_driver/tab.py,sha256=t7Ucn0pmm7imwdCM-5KmIJNU2MCeMuIl6G3T2VMrbxU,53170
|
|
126
126
|
seleniumbase/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -129,17 +129,17 @@ seleniumbase/utilities/selenium_grid/download_selenium_server.py,sha256=ZdoInIbh
|
|
|
129
129
|
seleniumbase/utilities/selenium_grid/font_color,sha256=NLVgBzkyygZjIf_hZWpMUlO5kHIUWG7ZWyoLhaLUCgY,468
|
|
130
130
|
seleniumbase/utilities/selenium_grid/grid-hub,sha256=v7z2qYzHk4pZ_I794rS6xTfyw_TVIrUHxNDwsbUPbtw,3021
|
|
131
131
|
seleniumbase/utilities/selenium_grid/grid-node,sha256=B3lHB81pVpn5j99cvB_Tzktykf-ZcGX6jFl0Wb-e9Vw,3186
|
|
132
|
-
seleniumbase/utilities/selenium_grid/grid_hub.py,sha256=
|
|
133
|
-
seleniumbase/utilities/selenium_grid/grid_node.py,sha256=
|
|
132
|
+
seleniumbase/utilities/selenium_grid/grid_hub.py,sha256=Ol2E0vmHSMWqGD6RfBbl6fkai3flybNQBYZOOuBredc,5046
|
|
133
|
+
seleniumbase/utilities/selenium_grid/grid_node.py,sha256=1eZlv6qXP-7WnUc1JQvyNx0bnl5fIxDLaNUWGmT7kAI,5460
|
|
134
134
|
seleniumbase/utilities/selenium_grid/register-grid-node.bat,sha256=d-PTBiMXyRAsJQ7f86BSV6ThyYvL7EL-RTSgGVHWL70,263
|
|
135
135
|
seleniumbase/utilities/selenium_grid/register-grid-node.sh,sha256=TJE3VkkpXsR3GsBtULIRhsAPuW9LJlglKAHJ-QHkK3c,275
|
|
136
136
|
seleniumbase/utilities/selenium_grid/start-grid-hub.bat,sha256=Ftq-GrAKRYH2ssDPrI3F0tw3EB4BZ4oGplOObX9cuTA,94
|
|
137
137
|
seleniumbase/utilities/selenium_grid/start-grid-hub.sh,sha256=KADv0RUHONLL2_I443QFK8PryBpDmKn5Gy0s4o0vDSM,106
|
|
138
138
|
seleniumbase/utilities/selenium_ide/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
139
|
-
seleniumbase/utilities/selenium_ide/convert_ide.py,sha256=
|
|
140
|
-
seleniumbase-4.
|
|
141
|
-
seleniumbase-4.
|
|
142
|
-
seleniumbase-4.
|
|
143
|
-
seleniumbase-4.
|
|
144
|
-
seleniumbase-4.
|
|
145
|
-
seleniumbase-4.
|
|
139
|
+
seleniumbase/utilities/selenium_ide/convert_ide.py,sha256=UQR4DHlaaEiOzeVniZ6BzmdaTdhpE85rJHRWpB1PHok,31670
|
|
140
|
+
seleniumbase-4.43.1.dist-info/licenses/LICENSE,sha256=BRblZsX7HyPUjQmYTiyWr_e9tzWvmR3R4SFclM2R3W0,1085
|
|
141
|
+
seleniumbase-4.43.1.dist-info/METADATA,sha256=twtmOmzf-WvXgjwu_VyCfzO3_hZDNbZWrCPlfxYNbJo,90312
|
|
142
|
+
seleniumbase-4.43.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
143
|
+
seleniumbase-4.43.1.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
|
|
144
|
+
seleniumbase-4.43.1.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
|
|
145
|
+
seleniumbase-4.43.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|