-
Notifications
You must be signed in to change notification settings - Fork 30
/
CHANGELIST.txt
1381 lines (1235 loc) · 67.4 KB
/
CHANGELIST.txt
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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Following is the list of critical additions and updates for a given version. Some of these versions are released to PyPI:
Future Themes (In-Progress or Planned):
- System exit code for arjuna should be based on pytest exit codes across session group threads.
- Call Walkthroughs and Identify New Named Exceptions to be created.
- GUI Automation
- withx hook for programmatic identifiers.
- Support multiple entries for same locator type in YAML file.
- The report directory should contain a confs directory. Whenever a new configuration is created. All its parameters should be dumped in a file for reference.
- Better Logging
- Devise a way for the logger pre and post pytest runs.
- Report merging for HTML and XML files.
- From discussions with Stefan:
- Support for custom CSS for HTML reporting in Arjuna test projects.
- Tests with bugs should be marked as xfail automatically. (Configurable)
- ArjunaOption.REPORT_SORT_BY_NAME based on pytest-html option if available Or else auto execte an injected JavaScript to do this.
- See if a sortable reporting time column and group column can be introduced as well.
- Docs:
- Table: Coded Locators and GNS
- Recipes
1.2.25
------
1.2.24
------
- Critical Fix for XPath based node conversion.
1.2.23
------
- Support for source and target offsets in drag and drop function.
1.2.21
------
- Support for drag and drop operations for GuiElement.
- Support for attrs in node for XPath and CSS Selector generation.
- Initial support for frame handling. GuiFrame is a new class added with simple to use features.
- Added documentation for various GuiElement methods. Rearranged Gui Auto docs.
1.2.20
------
- Support for OAuth Auth Grant service added by Stefan.
1.2.19
------
- CRITICAL FIX: Xml.node_locator call retained attr dict values in successive calls. Fixed.
1.2.18
------
- Added support for text and attr dict based search in XML/HTML NodeLocator.
- Added documentation for Email Reading Automation
1.2.17
------
- Support for Reading Emails using IMAP (instead of POP) as it provides more stability and features.
- Support to connect to a given mailbox. Inbox is the default.
- State mechanism to identify new emails using save_state.
- The emails are filterable by sender, subject, content.
- The emails are got as latest first by default (IMAP gives the latest one at end). Can be overriden.
- Support for getting top x emails.
- Reading the email is a waitable event as there might be some delay in getting email from server.
- Server host, port, user, password etc are configurable. SSL usage is default.
- Support for finding all unique links.
- Support for HTML as well as text content in emails. Support for Multi-part Email.
- Support for easily available meta data of email like its sender, recipient, date, content and support for inquiring any custom headers.
- There is a lot of state management involved in maintaining connection to a mailbox. These intricacies are encapsulated to the max extent possible.
- The code represents a natural tester-oriented interface for automation.
1.2.16
------
- Introduced NotSet class for cases where code needs to differentiate not setting a value from Python None.
- An exception is raised if relative URL is provided for an HTTP request when the corresponding Service base URL is not set.
- Empty content POST/PUT/PATCH requests are allowed when request content handler is set at Service Level or HTTP Content object is provided at a request level.
- Empty content is supported for all content types except File/Multipart data.
1.2.15
------
- Added documentation for Malicious URL redirection HTTP action.
- HTTP Post and Put requests without content are allowed. Same as content="".
1.2.14
------
- Added URL Redirection security test action.
- FIX: Fixed Group selection.
1.2.13
------
- BUGFIX: HTTP layer tests at times got stuck after one test. This seems to happen when the socket library is not passed a timeout.
- A default socket timeout of 60 seconds is now configured.
- It can be changed at project level or in CLI options using SOCKET_TIMEOUT property.
1.2.12
------
- Added assert_or and assert_and methods to Asserter object.
- Added support for or, and constructs in HTTP message.
- Added built-in security tests at HTTP layer:
- Autocomplete field
- Cookie HTTPOnly and Secure
- CORS policy
- Frameable Response
- Information Disclosure
- Minimum JS Version
- Private IP disclosure
- Private Resource Accessible
- Strict Transport Policy
- Vulnerable JS Version
- Fixed logic in HTTP stores in case of extraction failure.
- Added Security testing section for built-in tests.
1.2.11
------
- Rearranged docs for Parsing formats.
- arjuna_format_str used internally is now a bound method format() of Text object and a part of TPI.
1.2.10
------
- Data Entity
- Data Entities are mutable by default.
- An object of a data entity can be made immutable by passing freeze=True as argument.
- Random class
- Added Random.person and Random.address calls to generate Person and Address data entity objects.
- Added support for providing name and/or domain in Random.email
- Added Random.alphabet method
- Revamped documentation for Random class and wrote additional tests
- HTTP Message
- Added support for strict/non-strict mode in store section. Default is strict.
- Added support for jpath in store section.
- HTTP Action
- Added support for aliasing of data
- Data can flow between messages as the action store is updated with extracted data from messages.
- Documention created for most common use cases.
- Fixes in Xml.from_str method.
1.2.9
-----
- Hook restructuring: Resources, Entities and Config hooks will now be present under project/libs/hook sub-package.
- Data Entity and Data Generator support added to HTTP Action in SEAMful model.
- New tests added to validate HTTP actions.
- Arjuna Format String now supports special lookups
* data.xyz looks up in data container.
* abc.xyz looks up in abc container.
* xyz looks up for a direct name xyz and then also looks up in data container.
* Conceptual support added for a.b.c or even a.b.c[123] style placements. This is yet to be tested.
- Internal module added for dynamic importing.
- New Arjuna Options added for hook packages.
- Step wise logging added for HTTP Action and Message for clarity. Custom string representations added to the objects themselves.
1.2.8
-----
- Added dictionary behavior to dynamic Data Entity that Arjuna generates using data_entity call.
- Objects of these classes are immutable.
- Added **remove** support to all dictionary methods and **as_dict** method to exclude one of more keys.
- Created tests to validate these new features.
1.2.7
----
- Arjuna's HTTP Layer automation now exposes only HttpService as a top object for doing seamful as well as simple automation.
- HttpSession is an Arjuna internal object (non-TPI). Http class methods for sending requests have been removed as in practice non-auto cookie management is rarely required. This reduces the public interface of Arjuna thereby simplying learning curve and documentation.
- Initial support for HTTP Action externalization added.
- Added Hover as a waitable operation.
1.2.6
-----
- JsonDict updates __getattr__ method to support returning of Arjuna Json objects (JsonDict/JsonList).
1.2.5
-----
- Fix in logger functionality to convert msg to string representation to allow non-string objects to be logged.
1.2.4
-----
- Fixes in assert_match method of JsonDict.
1.2.3
-----
- Data Record is now aware of Arjuna's generator construct and calls its generate() method automatically even if not called explicitly.
1.2.2
-----
- Added jsonpath-ng==1.5.3 to dependencies.
1.2.1
-----
- Support for Min len in Random string generation. Added provision for strict usage and custom delimiter.
- Added fixed_length_str method in Random class
- JsonDict.assert_match: ignore_keys is changed to ignore argument which supports Jpath based igorning of content in JsonDict while matching.
- JsonDict now support del keyword for deleting an item.
- Added pop/extend/append methods to JsonList
1.2.0
-----
- Fix in arj_convert. When it checks for blank string, it first checks for its type to avoid triggering the overloaded == logic in provided object.
1.1.44
------
- Fix in matches_schema method for Json to handle mismtach in array entries.
1.1.43
------
- HttpAuto
- strict argument has been deprecated in HTTP method calls.
- Support for externalization of HTTP msg (Basic Support. More features will unfold in upcoming builds.)
- remove_none default has been changed to True for Data Entity's .as_dict() method.
- Added support for data_entity as a valid content without converting using as_dict().
- Added support for Parsed cookie and HttpCookie Arjuna class.
- Support for checking secure and HttpOnly flags.
- HttpRequest.text returns Arjuna's Text object. For raw text, use .content
- Support for has/match sections for basic existence and equality assertion on content.
- Support for store and validate sections in message for advanced assertions beyond has (exists) and match (equality). Works for headers as well.
- JsonDict can be compared with YamlDict or DataEntity. JsonList can be compared with YamlList.
1.1.42
------
- Fix for max_wait in GNS
- Fix in proxy setting for Selenium
- Fix in Json.from_dict
1.1.40
------
- A custom Http Proxy can be set for GUI Automation and HTTP Automation.
- Arjuna options - HTTP_PROXY_ENABLED, HTTP_PROXY_HOST, HTTP_PROXY_PORT introduced.
- Proxy is disabled by default.
- Stefan's mix for size assertion exception message merged.
1.1.39
------
- Changed laxml dependency to lxml>=4.4.1
1.1.38
------
- Fixed new Arjuna test project creation
1.1.37
------
- Debug mode in VSCode works. Arjuna selection uses a uniform way of determining qual name for all situations.
1.1.36
------
- Added advanced assertions:
- approximate equality comparison: assert_approx_equal and assert_approx_not_equal
- asserting raised exceptions: assert_exceptions (callable or as context manager). Supports regex match for string repr of exception.
- --project accepts project path relative to current working directory. It also accepts '.'
- Internal improvements to cater to pytest's auto-disocvery mehchanism in situation of multiple projects.
1.1.35
------
- Arjuna header is shown when any command is executed.
- Updated copyright info.
1.1.34
------
- Added !join construct support in YAML files.
- Upgraded pytest and selenium versions.
- Arjuna now needs Python 3.8+
1.1.33
------
- Arjuna acts as a pytest plugin for the purpose of test execution.
- CLI options are significantly updated. Old usage is deprecated. Refer the new docs.
1.1.31
------
- Support for axes locator
- Added axes locator and made minor doc edits for name of app in GuiAuto chapter.
1.1.30
------
- Support for OR relationship among different values of same locator type - coded as well as GNS.
- Support for Visual Relationships
- Coded - Added at App/Page level.
- GNS Support added - Can provide label from same GNS file.
- Coded - widget call can be used to provide as relationship rather than existing element.
- GNS supports chain of relation: label1 -> label2 -> label3
- When multiple locators are provided with an OR relationship, relations are applied to each one of them.
- In GNS the relationship labels can contain Arjuna placeholders and then the parent label can be formaated as usual using gns.formatter call.
- Nested element finding falls back to direct finding with WebDriver as JS execution support exists only at driver level in Selenium.
- with.JS and With.Point is supported at element level, however it does not do nested element finding, rather uses driver itself.
- The fallback mechanism for JS, Point and Relative locators has been added so that such locators can be defined without issues in GNS files or coded GuiSections which have root element set for them.
- 'pos' meta key in widget meta data:
- Supported in coded as well GNS format.
- Supported in nested element finding.
- Value can be an int, a list, an extractor string literal, an extractor specification dict or an extractor object.
- Docs added for additional OR support, Visual Relationships and position filters
1.1.29
------
- Rearranged locator docs to place coded and GNS entries next to each other.
- Added GuiWidgetDefinitionError as an exception to TPI.
- Added support for .local files for the following: (if present these files override the corresponding regular config files.)
- project.local.yaml
- data.local.yaml
- envs.local.yaml
- sessions.yaml, stages.yaml, groups.yaml
- Support for empty sessions.yaml, stages.yaml and groups.yaml. Named exception raised rather than NoneType exception.
1.1.28
------
- Fixed typo in setup
1.1.27
------
- Added explicit requirement for urllib3
1.1.26
------
- Support for bases in Data Entity - building a data entiry from other data entities.
- Added doc for YAML's handling of boolean strings.
- Added tests and docs for Data Spaces.
1.1.25
------
- Support for anonymous/positional $$ placeholders in withx extended locator definitions.
- attr() call now accepts a single key-value pair instead of two positional arguments. Conflicting Python name is prefixed with two underscores (__)
- node() call simplified. Conflicting Python name is prefixed with two underscores (__).
- Updated Locator Docs to reflect the above improvements.
- Fix in GuiDropDown logic - changed 'tag' to 'tags'.
- Added TPI exceptions to global import.
1.1.24
------
- Fix in attr locators used in withx
1.1.23
------
- node Locator
- Converts to Xpath or CSS Selector based on condition of text matching (text or star_text or dot_text)
- Added provision for star_text which converts to *//text() instead of text() for specified text. It can also be specified as *text.
- Added provision for dot_text which converts to . instead of text() for for specified text. It can also be specified as .text.
- tags support is added to define multiple tags which are treated as a relative sequence of tags. Either tag or tags should be used. tags can take a single tag, multiple space separated tags as well as a list of tag strings.
- classes support is added to define one or more classes as string or sequence.
- tag locator changed to tags
- Is converted to CSS selectors
- The tags can be provided as space separated tags string or sequnce of tag strings.
- When more than one tag is supplied, the sequnce is assumed to be a descendant sequence (not immediate children)
- Docs updated and improved for locators.
1.1.22
------
- Support for 'node' as a valid selector (with type)
- Can be used programmatically in calls e.g. element(node=node(**kwargs))
- If the names of attrs conflict with python keywords (e.g. for), you can also provide an 'attrs' dict: element(node=node(a=b, attrs={'c' : 'd'}))
- The values in attrs dict are overriden by the direct kv paris supplied in node call.
- 'tag' is a special key and represents the tag name of the node and is not treated as an attribute.
- 'text' is a special key and represents the text content of the node and is used for matching.
- node represents partial match for attribute contents, bnode partial match at beginning of attributes contents and fnode represents full content of node attributes.
- There is an AND relationship among all attribute values supplied.
- You can use formatters to format the '$$' placeholders within keys and values of node, bnode and fnode.
- These selectors can be used in GNS files just like other selectors.
- Updates in Attribute related locators.
- Change in the way attr, fattr are specified in code and GNS. Breaks current usage.
- Rather than name and value arguments, direct value will be supplied as key value pair.
- Specifying tag in the definition will not be supported.
- node selectors will support tag and multiple attributes to bridge this gap and provide more advanced functionality.
- battr, eattr support
- attr related locators are converted to CSS Selectors instead of XPath.
- Withx Enhancements
- Withx can be used to define custom locators using node, bnode and fnode. Placeholders and kwargs work for attr names as well as values.
- Withx supports $$ placeholders like normal GNS.
- Withx suports C,L,R placeholders.
- Name changes: Attr -> attr, NVPairs -> nvpairs
- Comprehensive documentation of locators in coded and GNS formats along with withx documentation.
1.1.21
------
- More information in exceptions that are raised when linked projects represent wrong paths.
1.1.20
------
- Reverted traceback to default.
1.1.19
------
- Changed report exception pytest traceback type to line for terse output (experimental)
1.1.18
------
- Added datetime helper module in TPI
- Time, DateTime, DateTimeDelta, DateTimeDeltaBuilder, DateTimeStepper classes.
1.1.17
------
- Fix for non-existing central withx.yaml.
- Fix by Stefan for MySQL connector error.
1.1.16
------
- Added doc for project linking.
- Added doc for using selection rules in CLI and groups.yaml
- Doc comments for Text parsing module.
- Added documentation for Text parsing under Parsing section.
- Names of text parsers have been updated.
- Return type of headers in text file changed from list to tuple.
- DataRecord - indexed_values_as_json and named_values_as_json properties added.
1.1.15
------
- Added versions of dependencies in setup.py
- Arjuna version is included in the HTML report.
- Added Text parsing class with various File reading formats to TPI.
1.1.14
------
- Added support to ignore insecure SSL certificate in Web Gui Automation.
- ArjunaOption.ALLOW_INSECURE_SSL_CERT can be set to False to switch this off (True by default). The browser should support this capability.
1.1.13
------
- Concept of Linked Arjuna Projects introduced. An Arjuna Project can be linked to other Arjuna Projects (only one level of relationship allowed).
- -l/--link-project CLI option added.
- Support for auto-merger of default ref configuration for parent project with all linked projects (including default data & env options merger with ref.)
- Support for auto-merger of data and environment configurations. The combinations are also included. However, combinations are created only project-wise (i.e. linked project data or env is not combined with data/env of top or other linked projects.)
- Support for auto-import of test resources defined in linked projects in the parent project (conftest.py auto-generation is improved to cater to this.)
- Support for fallback lookup of DBAuto SQL files from top project to linked projects in reversed order.
- Support for auto-merger of data references. If data references have same names, then preference order is top project and then linked projects in reverse order.
1.1.12
------
- Rudimentary support for DB Automation (experimental)
- Added DBAUTO_DIR and DBAUTO_SQL_DIR Arjuna options.
- DB.mysql factory.
1.1.11
------
- --rename-report option added to run-group CLI. Reports are generated without session and stage prefix for this option.
1.1.10
------
- Support for double click in GuiElement.
1.1.9
-----
- HTML report name changed.
- Added more project meta data to HTML report as well as Arjuna & pytest command line, reference configuration name.
- DEPS_DIR can be a path relative to the root of an Arjuna Test Project.
1.1.8
-----
- run-group option works even if sessions.yaml and stages.yaml are empty.
1.1.7
-----
- Fix in token logic for Client Grant in HTTP.
1.1.6
-----
- Added support for Dependency directory (ArjunaOption.DEPS_DIR). Defaults to <project>/dependency. Can be overriden in reference conf.
1.1.5
-----
- Fixed sesssion level header addition in Http Session.
- Support for Python list as content in Http methods.
1.1.2
-----
- Added support for hard refresh.
1.1.1
-----
- The pytest command on Windows has been changed w.r.t. capturing of console output/logs as it causes errors.
1.1.0
-----
Docs
- Updated format of various docs
- Included third party library info in index.rst
- Updated license and notice files.
1.0.19
------
Docs
- Data reference TPI docs.
- Added Test Reporting section.
- Docs for Screenshooter and Network recorder protocols.
- Stage level list of overridable configuration options.
- Logging and Tracking
- Multiprocessing for parallelism reverted to multithreading. Needs to be explored in future versions.
- register_configs hook name changed to register_ref_confs for clarity.
1.0.18
------
Docs
- Updated HTTP Auto docs to include Http Facade class.
HTTP Auto
- Http.content.json implements custom JSON encoder to handle nested structures containing Yaml or Json custom objects.
Fixes
- Fixed oauth_implicit_grant_service in http.py.
1.0.17
------
Http Automation
- Http Facade class added. Sessions are created using this class. Also supports quick sender methods with temp session creation.
- Support for basic and digest authentication.
- The session module is split into multiple modules for better maintenance as the code became large for single file.
- Added support for HEAD, PATCH, OPTIONS methods.
- Request headers property added for inquiry.
- is_redirect property added to HttpResponse
- Header assertions added.
- Support for pretty URL format for query params
- Support for query_params as a dict, for use when names are not valid python names.
- Added new named exceptions: HttpSendError, HttpConnectError, HttpRequestCreationError
- `content` as an alias for `text` for request and response objects.
- Redirections: max_redirects at session level (default 30), allow_redirects at individual send request level (default is True).
- Cookies can be added/overriden at request level.
- HttpResponse.cookies property added.
- Provision for request timeout.
- Support for setting proxy at session level.
- Support for utf8, bytes, file and multipart content type.
Configuration
- Added ArjunaOption.DATA_FILE_DIR to contain files that are supposed to be used as file data.
- create-project command creates project/data/file directory with a placeholder.
Data References
- Moved IndexedDataReference and ContextualDataReference classes to TPI.
NodeLocator
- Now available as Xml.node_locator
1.0.16
------
- Fixed run-session/run-stage/run-group commands as per changes in YAML.
- Parallel execution uses multiprocessing instead of multithreading now.
- Different Reference configs can be provided for different groups.
- GuiMultiElement now inherits from IterableAsserterMixin to support size-related assertions.
1.0.15
------
- Internal logging clean-up.
- Network recording support for Firefox
- Contextual Logging
- Improved logic to allow setting contexts in a reference config.
- A logging call marked with contexts does not get logged by default unless it has an intersection of atleast one context with ArjunaOption.LOG_ALLOWED_CONTEXTS in the reference config for the run.
- Introduced 3 built-in contexts: report, resource, request.
- More contextual logs will be introduced.
1.0.14
------
Network packet capture in Web UI tests
- BrowserMob Proxy integration
- Reference Config level options:
- ArjunaOption.BROWSER_NETWORK_RECORDER_ENABLED enables network recording. Default is False.
- Any config level options:
- ArjunaOption.BROWSER_NETWORK_RECORDER_AUTOMATIC instructs to GuiApp to start recording after browser is launched. Also, each GuiPage sets current title to its name. Default is False.
- The packets are captured and shown in HTML Reports just like Web service network packets.
Reporting
- Reference Config level options:
- ArjunaOption.REPORT_NETWORK_ALWAYS - Network info will be included even for passed tests.
- ArjunaOption.REPORT_SCREENSHOTS_ALWAYS - Screenshots will be included even for passed tests.
- Any config level options:
- ArjunaOption.REPORT_NETWORK_FILTER - Only requests with responses with content with html/json/xml are included in report.
Configuration
- Configuration stages defined as Default/Reference/CLI/Coded.
- DisallowedArjunaOptionError exception is raised if one attempts to set a config option at a level where it is not allowed.
Network Recorder Protocol
- request spaces can contain `network_recorder` attribute.
- A Network Recorder should have record/register methods. For Web UI automation, it can be set to `<app_object>.network_recorder`.
- The recorded traffic is automatically registered in case of errors in fixture/test.
- A `record` call also registers existing recording if any.
Data References
- Support bucket query which is equivalent to Arjuna.get_data_ref(bucket_name)
- Support for iterality in Contextual and Indexed References.
- Support for context/index based value retrieval like a dict/list syntax.
- Added documentation for these feature enhancements.
- Added example/test code.
CIStringDict
- Retains case-insensitive inquiries
- When all keys or items or raw object is retrieved, original casing of keys is retained.
DataRecord
- .named_values retains original casing of keys.
HTML Reporting
- JS/HTML now in res files.
- Collapsible redirected network packets based on Stefan's sample code submission.
1.0.13
------
Yaml
- Implemented iter logic in YamlList and YamlDict
- YamlDict and YamlList support == operator.
- Simplified Yaml API as aligned with other format parsers for consistency.
HTML Reporting
- Log height changed to 500px.
- Modal window dimensions chnaged to smaller.
Data References
- Added support for Yaml based contextual as well as indexed data references.
Docs
- Added doc comments for yaml module as it is in TPI.
- Added docs for indexed data references. Improved doc for contextual data references.
- Added doc for YAML in text parsing.
- @track within Arjuna uses `trace` level for most classes.
1.0.12
------
- Data Generation and Data Entities
- Added generator, processor, composite and composer classes.
- data_entity supports setting an attr to a function, generator or composite. These are called at the time of object initilization with facility for dynamic data generation every time.
- A single generated data object is processed using the processor provided in generator.
- Multiple generated data objects can be clubbed into with composite and composer constructs.
- Doc Comments
- data_entity
- generator, processor, composite and composer classes
- Docs added:
- Random class and Data Entity.
- Usage of generator, processor, composite and composer classes
- Json
- Added JsonSchemaBuilder class
- Added more methods to JsonSchema class
- JsonList supports JsonPath based find and findall.
- Repackaging
- json, html and xml modules moved to `tpi.parser`.
- data modules moved to `tpi.data`
- Arjex - New Examples/Tests
- Data Entity
- JsonPath-RW
- JsonPath-RW-EXT
- Genson-Schema-Creation
- Genson-Schema-Extraction
- Simplified Project Structure
- Cross-project resource importing
- Existing way unncessarily complex for beginners and too simplistic for advanced users.
- By default, all resource creators present in `lib/resource.py` are imported.
- For advanced usage, change it from module to package and add importable names to __all__ in __init__.py. Check arjex project for example.
- Removed Row Data Reference for Excel. Column ref is the default. /data/reference/excel contains such files. Doc and example code updated
- L10n files go directly in l10n directory.
- Data References
- Added support for Indexed Data References.
- Enhanced Query support allows for a blank query, thereby returning a DataRecord object for more involved coding.
- The string representing of such Data Record Shows data reference name and context/index used.
- Yaml module added to TPI's parser package.
- FIX:
- XmlNode's `text` and `texts` methods. lxml returned empty text for some HTML structures. Arjuna now uses .texts for both. Also changed "//text()" to ".//text()" in texts call.
1.0.11
------
- Added more parsing and building capabilities to Xml and Html objects.
- Cleaned up GuiSource code to use these capabilities.
- Added missing doc comments for Xml and Html classes.
- Doc comments for all Json classes.
- Added IterableAsserterMixin, separating commong assertions in JsonDict and JsonList classes.
- Added docs:
- HTTP Automation
- Json Parsing
- XML Parsing
- HTML Parsing
1.0.10
------
- User defined test attrs based selection fixed.
1.0.9
-----
- Minor changes in OAuth interface.
- Doc comments added for OAuth classes.
1.0.8
-----
- Fixed generated conftest.py to be lenient w.r.t. missing project structure for resource imports.
1.0.7
-----
- Doc Comments added:
- HttpSession, HttpRequest, HttpResponse
- Http Auto
- Added cusstom headers support for get, delete and put. Post support already existed.
- Data Entity
- Allows namedtuple style of multiple attr names in a single string.
- Clean string representation.
- Module based test selection
- Allows name with .py in -im, -em, as well as -ir/-er if rule string target is module.
1.0.6
-----
- Removed last_request from HttpResponse. `.request` is the last request.
1.0.5
-----
- Auto-generated conftest.py now does a basic if ModuleNotFoundError was for corresponding resource module.
- HTTP Level Test Automation (Work In Progress, Alpha Quality)
- Added basic support for HttpSession along with HttpRequest and HttpResponse classes.
- Added support for OAuth2 using Implicit Grant and Client Grant.
- JSON
- Added JsonDict and JsonList support
- Support for JsonDict and JsonList assertions of different types.
- Support for auto-extraction of schema from a json string or object.
- Support for basic schema validation of Json.
- New Named exceptions:
- HttpUnexpectedStatusCode
- Data Entity
- Is not an alias of namedtuple
- DataEntity is an alias of Arjuna's data_entity call.
- Allows setting defaults for entity attributes.
- Test Report Meta Data
- Introduced Test-wise report meta data container.
- Arjuna.get_report_metadata() can used anywhere in the project to access it.
- In test functions and @for_test resource functions, it can also be got using request.report_metadata
- Added an auto-fixture to add and clean entry for current test.
- Currently contains images and network packets.
- HTML Reporting
- Screenshots and Images:
- Take screenshshot adds the images to current test container.
- HTML report can include all screenshots.
- Rather than opening an image in a new window, it is opened in a modal window in the same tab.
- The modal window uses the same base64 embedded image.
- Network Traffic
- Arjuna Http request sending logic adds network packets to current test container.
- In case of redirects, all directs are captured.
- HTML report can includes all these packets.
- Method and URL are shown as a clickable button.
- Request/Response detail is shown in a modal window.
- Logging
- Added Trace level along with log_trace method.
- Newlines are removed from message.
- Track
- Long args are truncated to size 100.
- Long return vals are truncated to size 200.
- Allows `trace` level.
1.0.4
-----
- Fix in create-project: lib/fixture -> lib/resource
- Cleanup for extraneous Logging errors caused by pytest in stderr entry in reports.
1.0.3
-----
- Extraneous log message cleanup.
1.0.2
-----
- Windows 10 logging handle related exception happens unexpectedly. Log message will not be written in such a case. Execution continues.
1.0.1
-----
FIX: Dispatcher issue in MultiElement when created using filters.
1.0.0
-----
- Docs added for:
- Test Functions
- Test Resources
- Test Sessions, Stages and Groups
- PytestHooks made a private API.
0.9.26
------
- New CLI switches -ip, -ep for package based selection added.
- Support for ir (inclusion rules) and er (exclusion rules)
- Exclusion rules are evaluated. If a test function meets any of the rules, it is removed from collection.
- If the test function meeting any of the inclusion rules, it is included in the collection.
- --rule changed to -ir and -er to add provision for include and exclude rules via CLI. Used for magic group creation.
- ir and er sections can be added in a group definition in groups.yaml file.
- Internally, the ip/ep/im/em/it/et are converted to to ir/er rules. This means Arjuna is not using pytest markers for test selection. All selection is done based on Arjuna rule set.
- There is an AND condition between package, module and test rules.
- PytestHooks.select_tests hook created to select tests based on Arjuna rules. Called in `pytest_collection_modifyitems` pytest hook in conftest.py.
- Rules are also supported for user defined attributes.
- New symbols for rule creation:
- For string targets: !~= for does not match and !*= does not partially match.
- Arjuna built-in `group` fixture is now a default fixture. Group information is directly available in `request.group`. `request.group.space` can be used to store any objects.
- GuiApp's GuiNamespace acts a common namespace across pages, sections and dialogs.
- FIX: --dry-run switch.
- All run options work with the rule-based approach.
- Support for minimalistic project structure for simple use of Arjuna.
- Test Fixtures --> Referred as Test Resources. Have an option setting as default using `default` keyword argument.
- Support for `xfail` and `skip` keyword arguments in `@test` decorator. `xfail()` and `skip()` helper functions added.
- New Exceptions:
- TestDecoratorError
- TestSessionsFileNotFoundError
- TestStagesFileNotFoundError
- TestGroupsFileNotFoundError
0.9.25
------
- Selection Rules:
- Added Selection grammar for info, tags and boolean info types.
- Each rule can return True/False for an object which has these containers.
- Test function default info, tags, bugs, envs get created for inquiry using `request`.
- Fix in updating options from non-default `env` entry in envs.yaml.
- Fix to allow a user option name as an Enum constant.
- Fix in auto screenshot in case of failure in HTML report.
0.9.24
------
- Critical Fixes:
- dry_run and report format CLI defaults.
- create-project command changed and fixed as per new project structure for config yamls.
- CLI Updates
- Logging switches -dl and -ll moved inside the commands.
- -o and --dray-run show the allowed enum constants as choices.
- Doc updates:
- CLI doc.
- Configuration doc.
- Test Project doc.
0.9.23
------
- Test Groups
- are defined in groups.yaml file.
- A group can be run from the command line.
- Test Stages
- are defined in stages.yaml file.
- use **include:** and provide list of group names.
- A stage can be run from command line.
- Test Sessions
- are defined in sessions.yaml file.
- use **include:** and provide list of stage names.
- A session can be run from command line.
- CLI enhancements:
- **run-stage** command added. Using it you can directly run a defined test stage.
- **run-group** command added. Using it you can directly run a defined test group.
- New Named Exceptions:
- UndefinedTestStageError, InvalidTestStageDefError
- UndefinedTestGroupError
- CLI update
-o, -im, -em, -it, -et switches changed from plural switches expecting nargs to multi-switch method. This means these switches are single-arg switches and can be used in command line any number of times.
0.9.22
------
- Moved all types of configurations to YAML.
- Simplified internal configuration process.
- Single file for each of the following:
- Data configurations
- Environment Configurations
- Session Configurations
- New Named Exceptions:
- UndefinedTestSessionError
- InvalidTestSessionDefError
0.9.21
------
- Data Conf and Env conf concepts updated
- In a test project, you can define any number of data confs and/or env confs. These are auto-loaded.
- The configuration name for them are the file names (minus the .conf extension.)
- Arjuna looks for data.conf and env.conf and updates the reference configuration, if these files exist.
- Arjuna also generates confs for all combinations of run confs and env confs when it loads. For each combination:
- Ref config is taken as base
- data conf is superimposed
- env conf is superimposed
- CLI options are superimposed
- The config name is set to **runconfname_envconfname** e.g. **data1_env1**.
- The name can be used in the **magic C function** query or as the cname argument.
- Fixtures now allow drive_with argument.
- **-c** / **--conf** switch added. It becomes the conf object mapped to conf.
- Arjuna Session, Stage and Test Grouping concept added:
- run-project and run-selected represent a default session, stage and group as per the CLI switches. It always executes in a single thread.
- Built-in fixture **group** can be included in a test signature or fixture signature. It yields group parameters including name of group, thread name and configuration.
- pytest_generate_tests hook added to test project conftest.py, its Arjuna template and added PytestHooks.configure_group_for_test
- Auto-parameteries "group" built-in Arjuna fixture. The fixture can be added to a test function signature or any of its fixtures. Configuration passed with -c switch is used to parameterize the **group** fixture mentioned above.
- It is optional to use this fixture. However, if group related information (e.g. thread name, group name) is needed run time in fixture functions and test functions, then it can be used.
- run-session switch added to run a named session.
- Basic session.yaml support added. Supports stages and groups.
- A session can have multiple stages.
- Stages are always executed sequentially.
- A stage can have any number of groups.
- Stage can have groups run in parallel with its threads setting. Default is 1.
- A group has a unqiue and it defines pickers. It also can have a conf associated with it.
- Each group is run in a thread.
- If conf is defined for a group, the reference configuration is changed to this conf for this group run.
- Each group is reported separately in a .html and .xml file.
- Dry Run Major enhancement
- Not a boolen switch any more
- Takes SHOW_TESTS/SHOW_PLAN/RUN_FIXTURES arguments.
- Arjuna Hooks concept added
- **hook** directory in project root directory will contain various Arjuna hook modules and corresponding hook calls.
- **arjuna_config.py** is the name for configuration hooks.
- **register_configs(configurator)** is the first Arjuna hook created
- One can programmatically register any number of configurations by taking existing or these newly created configuration objects as basis.
- The hook is executed before sessions file is processed or test execution starts for a non-session run.
- The configurations created here can be used with -c / --conf command line switch. They can also be used as group config in session files.
- CLI Changes: CLI interface heavily updated for simpler names of switches along with more information in help.
0.9.20
------
- Implemented ScreenShooter protocol. Created ScreenShooter base class. **GuiApp** and **GuiPage** support the protocol in Arjuna.
- Added Image helper class.
- Added doc strings for:
- Gui, GuiAppContent, GuiApp, GuiPage, GuiSection, GuiDialog
- SingleGuiWidget, Locatable, GuiElement. GuiMultiElement, GuiDropDown, GuiRadioGroup
- Gui Locator Formatter, GuiWidgetDefinition, Dictable
- GNS, GNS Formtter
- GuiSource, SingleEntityGuiSource, GuiPageSource, GuiElementSource, GuiMultiElementSource
- Image
- AsserterMixin
- ScreenShooter
- All Arjuna Types in helper.arjtype
- GuiDialog is a class of its own now. Selector to follow. Separated in its own module.
- GuiAppContent separated in its own module.
- GNS rules have been indicated in the API doc. Coded restrictions need to be done yet for a more closely controlled GNS namespace structure.
- Log output (from display) is captured in the HTML report. Not displayed on the screen.
- GuiSource concept materialized as a hierarchy. Still work to do.
0.9.19
------
- Moved private enums and exceptions to arjuna.core module.
- Added doc strings for:
- DDT Classes
- Enums
- Exceptions
- Magic Functions
- Test Engine
- @test
- Fixtures
- Relation
- Asserter
- PytestHooks.enhance_reports
- @track
- Json
- xml: NodeLocator and XmlNode
- Elements in Gui are now referred as widgets (taking a cue from wxPython)
- **template** in GNS is changed to **type** for easy understandability (stands for widget type, default is element.)
- (Internal) Locator Meta Data concept has evolved. It now contains meta data about the widget beyond locating it. Its now referred as Gui Widget Meta Data. Reflected in internal class names, messages and exception names.
0.9.18
------
- Major change in internal packaging to aid in controlled API doc generation.
- License info changed from doc string to line-wise comments.
- Sphinx is now used for docs instead of markdown.
- Integration of docs with readthedocs.org: https://arjuna-taf.readthedocs.io
- Google Doc Style for Python has been identified for Arjuna API documentation.
- Tried for Configuration, ConfigurationBuilder and logging functions. Works well.
0.9.17
------
- Added **TRACE** level to log.
- **log_trace** is a direct call.
- By default trace messages are not included in display or log.
- Is configurable from command line, project.conf, --run_env and --run-conf.
- Added support for Contextual Logging
- All log messages are of **default** context
- You can mark a log message as belonging to one or more contexts.
- You can allow contexts by controlling the **ArjunaOption.LOG_ALLOWED_CONTEXTS** which is configurable from command line, project.conf, --run_env and --run-conf.
- Added **track** decorator.
- It logs begin with args, finish with return and exceptions for Classes, Methods and Functions.
- It also supports tracking **@classmethod**s and **@staticmethod**s automatically with class level track or individual track decorating.
- Properties can be decorated with **track** as well:
- Class level decorating does not cover properties.
- Decorating a setter automatically covers the getter.
- Default log level associating with tracking is **debug**. Can be controlled in each **track** decorator by providing the **level** argument.
- --run-conf can be provided wihtout .conf extension.
0.9.16
------
- Added doc for CLI.
- @for_group fixture support added.
0.9.15
------
- Major internal re-architecuring to support meta-data in GNS definition and direct coded locator calls.
- max_wait argument support in
- gui.wait_until_absent, gui.element.wait_until_absent
- gui.gns.wait_until_absent(label), gui.gns.label.gns.wait_until_absent(label), gui.gns.label.wait_until_absent
- gui.contains, gui.element.contains
- gui.gns.contains(label), gui.gns.label.gns.contains(label), gui.gns.label.contains
0.9.14
------
- Documents updated for a more manageable format instead of tight coupling with example code.
- **WebApp**, **Page**, **Section** class names are changed to **GuiApp**, **GuiPage** and **GuiSection** for future compatibility.
0.9.13
------
- wait_until_absent call supported
- Can be called with **Gui** as well as **GuiElement** as **.wait_until_absent(**locator_kwargs)**
- Raises GuiElementForLabelPresentError exception on failure.
- Can be called with **Gui** as well as **GuiElement** as **.wait_until_absent(**labels)**
- Raises GuiElementPresentError exception on failure.
- contains call supported
- Returns True/False.
- Can be called with **Gui** as well as **GuiElement** as **.contains(**locator_kwargs)**
- Can be called with **Gui** as well as **GuiElement** as **.contains(**labels)**
- FIX: Import bug in emd.py
0.9.12
------
- Added locate/element/multi_element/dropdown/radio_group factories to Gui and element/multi_element factories to GuiElement.
- The factories provide a more Pythonic syntax than using tuples or factories for every locator type in user API.
- withx works with the revised factory methods. One can provide **<withx_name>=Params([arg1=val1, arg2=val2, ... argN=valN])** argument to factory methods for identification.
- Locator and Formatter class added for providing complex identification constructs as a single argument. **.locate** method added to Gui and GuiElement.
- Formatted identifiers
- Identifiers can contain formatter placeholers with the syntax $xyz$ where xyz is a name which you want to replace with a value.
- For using formatted identifiers in code, you can use **gui.format(xyz=<value>).element(locator="$xyz$")** syntax.
- For using formatted identifiers in GNS, you can use **gui.format(xyz=<value>).label** syntax.
- Auto-loaded placeholder values: (query syntax is same as that for the magic **C**, **R** and **L** functions.)
- Configuration - Specified as **C.<query>**
- Contextual Data Reference - Specified as **R.<query>**
- Localized Strings - Specified as **L.<query>**
- Example code and documentation updates in progress.
- With and WithType are now completely internal to Arjuna.
- XmlSource class added with comprehensive node finding and inquiry support. xfinder name changed to NodeLocator to make it similar to Locator for Gui element finding.
0.9.11
------
- Direct log msg calls added: log_debug, log_info, log_warning, log_error, log_fatal. Implentation method used could be extended for contextual logging in Arjuna in future.
- Introduced GNS class. Gui and nested element access for labels defined in GNS can be done as **gui.gns.label** and **element.gns.label** respectively.
- root and anchor elements code optimized to work with direct reference to original element.
- withx supports attr and fattr with named args support for both name and value arguments.