github-markup 4.0.2 → 5.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +4 -4
- data/.gitignore +3 -1
- data/Gemfile +2 -2
- data/HISTORY.md +10 -0
- data/github-markup.gemspec +5 -4
- data/lib/github/markup/command_implementation.rb +8 -28
- data/lib/github-markup.rb +1 -1
- data/test/markup_test.rb +6 -1
- data/test/markups/README.asciidoc.html +1 -1
- data/test/markups/README.hidetitle.asciidoc.html +1 -1
- data/test/markups/README.litcoffee.html +1 -1
- data/test/markups/README.long.rst +1319 -0
- data/test/markups/README.long.rst.html +1303 -0
- data/test/markups/README.mediawiki.html +9 -5
- data/test/markups/README.pod.html +8 -4
- data/test/markups/README.rst.html +4 -4
- data/test/markups/README.toc.asciidoc.html +1 -1
- data/test/markups/README.toc.rst.html +2 -2
- metadata +14 -10
@@ -0,0 +1,1303 @@
|
|
1
|
+
<h1>Robot Framework 7.0</h1>
|
2
|
+
<p><a href="http://robotframework.org">Robot Framework</a> 7.0 is a new major release with highly enhanced listener interface
|
3
|
+
(<a href="https://github.com/robotframework/robotframework/issues/3296">#3296</a>), native <code>VAR</code> syntax for creating variables (<a href="https://github.com/robotframework/robotframework/issues/3761">#3761</a>), support for
|
4
|
+
mixing embedded and normal arguments with library keywords (<a href="https://github.com/robotframework/robotframework/issues/4710">#4710</a>), JSON
|
5
|
+
result format (<a href="https://github.com/robotframework/robotframework/issues/4847">#4847</a>) and various other enhancements and bug fixes.</p>
|
6
|
+
<p>Robot Framework 7.0 was released on Thursday January 11, 2024. Questions and comments
|
7
|
+
related to the release can be sent to the <code>#devel</code> channel on <a href="http://slack.robotframework.org">Robot Framework Slack</a>
|
8
|
+
and possible bugs submitted to the <a href="https://github.com/robotframework/robotframework/issues">issue tracker</a>.</p>
|
9
|
+
<div>
|
10
|
+
<ul>
|
11
|
+
<li><a href="#installation">Installation</a></li>
|
12
|
+
<li>
|
13
|
+
<a href="#most-important-enhancements">Most important enhancements</a><ul>
|
14
|
+
<li><a href="#listener-enhancements">Listener enhancements</a></li>
|
15
|
+
<li><a href="#native-var-syntax">Native <code>VAR</code> syntax</a></li>
|
16
|
+
<li><a href="#mixed-argument-support-with-library-keywords">Mixed argument support with library keywords</a></li>
|
17
|
+
<li><a href="#json-result-format">JSON result format</a></li>
|
18
|
+
<li><a href="#argument-conversion-enhancements">Argument conversion enhancements</a></li>
|
19
|
+
<li><a href="#tags-set-globally-can-be-removed-using-tag-syntax">Tags set globally can be removed using <code>-tag</code> syntax</a></li>
|
20
|
+
<li><a href="#dynamic-and-hybrid-library-apis-support-asynchronous-execution">Dynamic and hybrid library APIs support asynchronous execution</a></li>
|
21
|
+
<li><a href="#timestamps-in-result-model-and-output-xml-use-standard-format">Timestamps in result model and output.xml use standard format</a></li>
|
22
|
+
<li><a href="#dark-mode-support-to-report-and-log">Dark mode support to report and log</a></li>
|
23
|
+
</ul>
|
24
|
+
</li>
|
25
|
+
<li>
|
26
|
+
<a href="#backwards-incompatible-changes">Backwards incompatible changes</a><ul>
|
27
|
+
<li><a href="#python-3-6-and-3-7-are-no-longer-supported">Python 3.6 and 3.7 are no longer supported</a></li>
|
28
|
+
<li><a href="#changes-to-output-xml">Changes to output.xml</a></li>
|
29
|
+
<li><a href="#changes-to-result-model">Changes to result model</a></li>
|
30
|
+
<li><a href="#changes-to-parsing-model">Changes to parsing model</a></li>
|
31
|
+
<li><a href="#changes-to-libdoc-spec-files">Changes to Libdoc spec files</a></li>
|
32
|
+
<li><a href="#changes-to-selecting-tests-with-suite-test-and-include">Changes to selecting tests with <code>--suite</code>, <code>--test</code> and <code>--include</code></a></li>
|
33
|
+
<li><a href="#other-backwards-incompatible-changes">Other backwards incompatible changes</a></li>
|
34
|
+
</ul>
|
35
|
+
</li>
|
36
|
+
<li>
|
37
|
+
<a href="#deprecations">Deprecations</a><ul>
|
38
|
+
<li><a href="#return-setting"><code>[Return]</code> setting</a></li>
|
39
|
+
<li><a href="#singular-section-headers">Singular section headers</a></li>
|
40
|
+
<li><a href="#deprecated-attributes-in-parsing-running-and-result-models">Deprecated attributes in parsing, running and result models</a></li>
|
41
|
+
<li><a href="#other-deprecated-features">Other deprecated features</a></li>
|
42
|
+
</ul>
|
43
|
+
</li>
|
44
|
+
<li><a href="#acknowledgements">Acknowledgements</a></li>
|
45
|
+
<li><a href="#full-list-of-fixes-and-enhancements">Full list of fixes and enhancements</a></li>
|
46
|
+
</ul>
|
47
|
+
</div>
|
48
|
+
<a name="installation"></a>
|
49
|
+
<h2><a href="#toc-entry-1">Installation</a></h2>
|
50
|
+
<p>If you have <a href="http://pip-installer.org">pip</a> installed, just run</p>
|
51
|
+
<pre>
|
52
|
+
pip install --upgrade robotframework
|
53
|
+
</pre>
|
54
|
+
<p>to install the latest available stable release or use</p>
|
55
|
+
<pre>
|
56
|
+
pip install robotframework==7.0
|
57
|
+
</pre>
|
58
|
+
<p>to install exactly this version. Alternatively you can download the package
|
59
|
+
from <a href="https://pypi.python.org/pypi/robotframework">PyPI</a> and install it manually. For more details and other installation
|
60
|
+
approaches, see the <a href="../../INSTALL.rst">installation instructions</a>.</p>
|
61
|
+
<a name="most-important-enhancements"></a>
|
62
|
+
<h2><a href="#toc-entry-2">Most important enhancements</a></h2>
|
63
|
+
<blockquote>
|
64
|
+
<p>If you are interested to learn more about the new features in Robot Framework 7.0,
|
65
|
+
join the <a href="https://robocon.io">RoboCon conference</a> in February, 2024. <a href="https://github.com/pekkaklarck">Pekka Klärck</a>, Robot Framework
|
66
|
+
lead developer, will go through the key features briefly in the <a href="https://robocon.io/#live-opening-the-conference">onsite conference</a>
|
67
|
+
in Helsinki and more thoroughly in the <a href="https://robocon.io/#online-opening-the-conference-live">online edition</a>.</p>
|
68
|
+
<p>The conference has also dozens of other great talks, workshops and a lot of
|
69
|
+
possibilities to meet other community members as well as developers of various
|
70
|
+
tools and libraries in the ecosystem. All profits from the conference will be
|
71
|
+
used for future Robot Framework development.</p>
|
72
|
+
</blockquote>
|
73
|
+
<a name="listener-enhancements"></a>
|
74
|
+
<h3><a href="#toc-entry-3">Listener enhancements</a></h3>
|
75
|
+
<p>Robot Framework's <a href="http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#listener-interface">listener interface</a> is a very powerful mechanism to get
|
76
|
+
notifications about various events during execution and it also allows modifying
|
77
|
+
data and results on the fly. It is not typically directly used by normal Robot
|
78
|
+
Framework users, but they are likely to use tools that use it internally.
|
79
|
+
The listener API has been significantly enhanced making it possible
|
80
|
+
to create even more powerful and interesting tools in the future.</p>
|
81
|
+
<a name="support-keywords-and-control-structures-with-listener-version-3"></a>
|
82
|
+
<h4>Support keywords and control structures with listener version 3</h4>
|
83
|
+
<p>The major limitation with the listener API has been that the listener
|
84
|
+
API version 2 only supports getting notifications, not making modifications,
|
85
|
+
and that the more powerful listener API version 3 has only supported suites
|
86
|
+
and tests/tasks.</p>
|
87
|
+
<p>The biggest enhancement in the whole Robot Framework 7.0 is that the listener
|
88
|
+
version 3 has been extended to support also keywords and control structures (<a href="https://github.com/robotframework/robotframework/issues/3296">#3296</a>).
|
89
|
+
For example, a listener having the following methods prints information
|
90
|
+
about started keywords and ended WHILE loops:</p>
|
91
|
+
<pre lang="python">
|
92
|
+
from robot import result, running
|
93
|
+
|
94
|
+
|
95
|
+
def start_keyword(data: running.Keyword, result: result.Keyword):
|
96
|
+
print(f"Keyword '{result.full_name}' used on line {data.lineno} started.")
|
97
|
+
|
98
|
+
|
99
|
+
def end_while(data: running.While, result: result.While):
|
100
|
+
print(f"WHILE loop on line {data.lineno} ended with status {result.status} "
|
101
|
+
f"after {len(result.body)} iterations.")
|
102
|
+
</pre>
|
103
|
+
<p>With keyword calls it is possible to also get more information about the actually
|
104
|
+
executed keyword. For example, the following listener prints some information
|
105
|
+
about the executed keyword and the library it belongs to:</p>
|
106
|
+
<pre lang="python">
|
107
|
+
from robot.running import Keyword as KeywordData, LibraryKeyword
|
108
|
+
from robot.result import Keyword as KeywordResult
|
109
|
+
|
110
|
+
|
111
|
+
def start_library_keyword(data: KeywordData,
|
112
|
+
implementation: LibraryKeyword,
|
113
|
+
result: KeywordResult):
|
114
|
+
library = implementation.owner
|
115
|
+
print(f"Keyword '{implementation.name}' is implemented in library "
|
116
|
+
f"'{library.name}' at '{implementation.source}' on line "
|
117
|
+
f"{implementation.lineno}. The library has {library.scope.name} "
|
118
|
+
f"scope and the current instance is {library.instance}.")
|
119
|
+
</pre>
|
120
|
+
<p>As the above example already illustrated, it is even possible to get an access to
|
121
|
+
the actual library instance. This means that listeners can inspect the library
|
122
|
+
state and also modify it. With user keywords it is even possible to modify
|
123
|
+
the keyword itself or, via the <code>owner</code> resource file, any other keyword in
|
124
|
+
the resource file.</p>
|
125
|
+
<p>Listeners can also modify results if needed. Possible use cases include hiding
|
126
|
+
sensitive information and adding more details to results based on external sources.</p>
|
127
|
+
<p>Notice that although listener can change status of any executed keyword or control
|
128
|
+
structure, that does not directly affect the status of the executed test. In general
|
129
|
+
listeners cannot directly fail keywords so that execution would stop or handle
|
130
|
+
failures so that execution would continue. This kind of functionality may be
|
131
|
+
added in the future if there are needs.</p>
|
132
|
+
<p>The new listener version 3 methods are so powerful and versatile that going them
|
133
|
+
through thoroughly in these release notes is not possible. For more examples, you
|
134
|
+
can see the <a href="https://github.com/robotframework/robotframework/tree/master/atest/testdata/output/listener_interface/body_items_v3">acceptance tests</a> using the methods in various interesting and even
|
135
|
+
crazy ways.</p>
|
136
|
+
<a name="listener-version-3-is-the-default-listener-version"></a>
|
137
|
+
<h4>Listener version 3 is the default listener version</h4>
|
138
|
+
<p>Earlier listeners always needed to specify the API version they used with the
|
139
|
+
<code>ROBOT_LISTENER_API_VERSION</code> attribute. Now that the listener version 3 got
|
140
|
+
the new methods, it is considered so much more powerful than the version 2
|
141
|
+
that it was made the default listener version (<a href="https://github.com/robotframework/robotframework/issues/4910">#4910</a>).</p>
|
142
|
+
<p>The listener version 2 continues to work, but using it requires specifying
|
143
|
+
the listener version as earlier. The are no plans to deprecate the listener
|
144
|
+
version 2, but we nevertheless highly recommend using the version 3 whenever
|
145
|
+
possible.</p>
|
146
|
+
<a name="libraries-can-register-themselves-as-listeners-by-using-string-self"></a>
|
147
|
+
<h4>Libraries can register themselves as listeners by using string <code>SELF</code>
|
148
|
+
</h4>
|
149
|
+
<p>Listeners are typically enabled from the command line, but libraries
|
150
|
+
can register listeners as well. Often libraries themselves want to act
|
151
|
+
as listeners, and that has earlier required using <code>self.ROBOT_LIBRARY_LISTENER = self</code>
|
152
|
+
in the <code>__init__</code> method. Robot Framework 7.0 makes it possible to use string
|
153
|
+
<code>SELF</code> (case-insensitive) for this purpose as well (<a href="https://github.com/robotframework/robotframework/issues/4910">#4910</a>), which means
|
154
|
+
that a listener can be specified as a class attribute and not only in <code>__init__</code>.
|
155
|
+
This is especially convenient when using the <code>@library</code> decorator:</p>
|
156
|
+
<pre lang="python">
|
157
|
+
from robot.api.deco import keyword, library
|
158
|
+
|
159
|
+
|
160
|
+
@library(listener='SELF')
|
161
|
+
class Example:
|
162
|
+
|
163
|
+
def start_suite(self, data, result):
|
164
|
+
...
|
165
|
+
|
166
|
+
@keyword
|
167
|
+
def example(self, arg):
|
168
|
+
...
|
169
|
+
</pre>
|
170
|
+
<a name="nicer-api-for-modifying-keyword-arguments"></a>
|
171
|
+
<h4>Nicer API for modifying keyword arguments</h4>
|
172
|
+
<p>Modifying keyword call arguments programmatically has been made more convenient
|
173
|
+
(<a href="https://github.com/robotframework/robotframework/issues/5000">#5000</a>). This enhancement eases modifying arguments using the new listener
|
174
|
+
version 3 <code>start/end_keyword</code> methods.</p>
|
175
|
+
<a name="paths-are-passed-to-version-3-listeners-as-pathlib-path-objects"></a>
|
176
|
+
<h4>Paths are passed to version 3 listeners as <code>pathlib.Path</code> objects</h4>
|
177
|
+
<p>Listeners have methods like <code>output_file</code> and <code>log_file</code> that are called when
|
178
|
+
result files are ready so that they get the file path as an argument. Earlier
|
179
|
+
paths were strings, but nowadays listener version 3 methods get them as
|
180
|
+
more convenient <a href="https://docs.python.org/3/library/pathlib.html">pathlib.Path</a> objects.</p>
|
181
|
+
<a name="native-var-syntax"></a>
|
182
|
+
<h3><a href="#toc-entry-4">Native <code>VAR</code> syntax</a></h3>
|
183
|
+
<p>The new <code>VAR</code> syntax (<a href="https://github.com/robotframework/robotframework/issues/3761">#3761</a>) makes it possible to create local variables
|
184
|
+
as well as global, suite and test/task scoped variables dynamically during
|
185
|
+
execution. The motivation is to have a more convenient syntax than using
|
186
|
+
the <code>Set Variable</code> keyword for creating local variables and to unify
|
187
|
+
the syntax for creating variables in different scopes. Except for the mandatory
|
188
|
+
<code>VAR</code> marker, the syntax is also the same as when creating variables in the
|
189
|
+
Variables section. The syntax is best explained with examples:</p>
|
190
|
+
<pre lang="robotframework">
|
191
|
+
*** Test Cases ***
|
192
|
+
Example
|
193
|
+
# Create a local variable `${local}` with a value `value`.
|
194
|
+
VAR ${local} value
|
195
|
+
|
196
|
+
# Create a variable that is available throughout the whole suite.
|
197
|
+
# Supported scopes are GLOBAL, SUITE, TEST, TASK and LOCAL (default).
|
198
|
+
VAR ${suite} value scope=SUITE
|
199
|
+
|
200
|
+
# Validate created variables.
|
201
|
+
Should Be Equal ${local} value
|
202
|
+
Should Be Equal ${suite} value
|
203
|
+
|
204
|
+
Example continued
|
205
|
+
# Suite level variables are seen also by subsequent tests.
|
206
|
+
Should Be Equal ${suite} value
|
207
|
+
</pre>
|
208
|
+
<p>When creating <code>${scalar}</code> variables having long values, it is possible to split
|
209
|
+
the value to multiple lines. Lines are joined together with a space by default,
|
210
|
+
but that can be changed with the <code>separator</code> configuration option. Similarly as
|
211
|
+
in the Variables section, it is possible to create also <code>@{list}</code> and <code>&{dict}</code>
|
212
|
+
variables. Unlike in the Variables section, variables can be created conditionally
|
213
|
+
using IF/ELSE structures:</p>
|
214
|
+
<pre lang="robotframework">
|
215
|
+
*** Test Cases ***
|
216
|
+
Long value
|
217
|
+
VAR ${long}
|
218
|
+
... This value is rather long.
|
219
|
+
... It has been split to multiple lines.
|
220
|
+
... Parts will be joined together with a space.
|
221
|
+
|
222
|
+
Multiline
|
223
|
+
VAR ${multiline}
|
224
|
+
... First line.
|
225
|
+
... Second line.
|
226
|
+
... Last line.
|
227
|
+
... separator=\n
|
228
|
+
|
229
|
+
List
|
230
|
+
# Creates a list with three items.
|
231
|
+
VAR @{list} a b c
|
232
|
+
|
233
|
+
Dictionary
|
234
|
+
# Creates a dictionary with two items.
|
235
|
+
VAR &{dict} key=value second=item
|
236
|
+
|
237
|
+
Normal IF
|
238
|
+
IF 1 > 0
|
239
|
+
VAR ${x} true value
|
240
|
+
ELSE
|
241
|
+
VAR ${x} false value
|
242
|
+
END
|
243
|
+
|
244
|
+
Inline IF
|
245
|
+
IF 1 > 0 VAR ${x} true value ELSE VAR ${x} false value
|
246
|
+
</pre>
|
247
|
+
<a name="mixed-argument-support-with-library-keywords"></a>
|
248
|
+
<h3><a href="#toc-entry-5">Mixed argument support with library keywords</a></h3>
|
249
|
+
<p>User keywords got support to use both embedded and normal arguments in Robot
|
250
|
+
Framework 6.1 (<a href="https://github.com/robotframework/robotframework/issues/4234">#4234</a>) and now that support has been added also to library keywords
|
251
|
+
(<a href="https://github.com/robotframework/robotframework/issues/4710">#4710</a>). The syntax works so, that if a function or method implementing a keyword
|
252
|
+
accepts more arguments than there are embedded arguments, the remaining arguments
|
253
|
+
can be passed in as normal arguments. This is illustrated by the following example
|
254
|
+
keyword:</p>
|
255
|
+
<pre lang="python">
|
256
|
+
@keyword('Number of ${animals} should be')
|
257
|
+
def example(animals, count):
|
258
|
+
...
|
259
|
+
</pre>
|
260
|
+
<p>The above keyword could be used like this:</p>
|
261
|
+
<pre lang="robotframework">
|
262
|
+
*** Test Cases ***
|
263
|
+
Example
|
264
|
+
Number of horses should be 2
|
265
|
+
Number of horses should be count=2
|
266
|
+
Number of dogs should be 3
|
267
|
+
</pre>
|
268
|
+
<a name="json-result-format"></a>
|
269
|
+
<h3><a href="#toc-entry-6">JSON result format</a></h3>
|
270
|
+
<p>Robot Framework 6.1 added support to <a href="https://github.com/robotframework/robotframework/blob/master/doc/releasenotes/rf-6.1.rst#json-data-format">convert test/task data to JSON and back</a>
|
271
|
+
and Robot Framework 7.0 extends the JSON serialization support to execution results
|
272
|
+
(<a href="https://github.com/robotframework/robotframework/issues/4847">#4847</a>). One of the core use cases for data serialization was making it easy to
|
273
|
+
transfer data between process and machines, and now it is also easy to pass results
|
274
|
+
back.</p>
|
275
|
+
<p>Also the built-in Rebot tool that is used for post-processing results supports
|
276
|
+
JSON files both in output and in input. Creating JSON output files is done using
|
277
|
+
the normal <code>--output</code> option so that the specified file has a <code>.json</code> extension:</p>
|
278
|
+
<pre>
|
279
|
+
rebot --output output.json output.xml
|
280
|
+
</pre>
|
281
|
+
<p>When reading output files, JSON files are automatically recognized by
|
282
|
+
the extension:</p>
|
283
|
+
<pre>
|
284
|
+
rebot output.json
|
285
|
+
rebot output1.json output2.json
|
286
|
+
</pre>
|
287
|
+
<p>When combining or merging results, it is possible to mix JSON and XML files:</p>
|
288
|
+
<pre>
|
289
|
+
rebot output1.xml output2.json
|
290
|
+
rebot --merge original.xml rerun.json
|
291
|
+
</pre>
|
292
|
+
<p>The JSON output file structure is documented in the <code>result.json</code> <a href="https://github.com/robotframework/robotframework/tree/master/doc/schema#readme">schema file</a>.</p>
|
293
|
+
<p>The plan is to enhance the support for JSON output files in the future so that
|
294
|
+
they could be created already during execution. For more details see issue <a href="https://github.com/robotframework/robotframework/issues/3423">#3423</a>.</p>
|
295
|
+
<a name="argument-conversion-enhancements"></a>
|
296
|
+
<h3><a href="#toc-entry-7">Argument conversion enhancements</a></h3>
|
297
|
+
<p>Automatic argument conversion is a very powerful feature that library developers
|
298
|
+
can use to avoid converting arguments manually and to get more useful Libdoc
|
299
|
+
documentation. There are two important new enhancements to it.</p>
|
300
|
+
<a name="support-for-literal"></a>
|
301
|
+
<h4>Support for <code>Literal</code>
|
302
|
+
</h4>
|
303
|
+
<p>In Python, the <a href="https://docs.python.org/3/library/typing.html#typing.Literal">Literal</a> type makes it possible to type arguments so that type
|
304
|
+
checkers accept only certain values. For example, this function only accepts
|
305
|
+
strings <code>x</code>, <code>y</code> and <code>z</code>:</p>
|
306
|
+
<pre lang="python">
|
307
|
+
def example(arg: Literal['x', 'y', 'z']):
|
308
|
+
...
|
309
|
+
</pre>
|
310
|
+
<p>Robot Framework has been enhanced so that it validates that an argument having
|
311
|
+
a <code>Literal</code> type can only be used with the specified values (<a href="https://github.com/robotframework/robotframework/issues/4633">#4633</a>). For
|
312
|
+
example, using a keyword with the above implementation with a value <code>xxx</code> would
|
313
|
+
fail.</p>
|
314
|
+
<p>In addition to validation, arguments are also converted. For example, if an
|
315
|
+
argument accepts <code>Literal[-1, 0, 1]</code>, used arguments are converted to
|
316
|
+
integers and then validated. In addition to that, string matching is case, space,
|
317
|
+
underscore and hyphen insensitive. In all cases exact matches have a precedence
|
318
|
+
and the argument that is passed to the keyword is guaranteed to be in the exact
|
319
|
+
format used with <code>Literal</code>.</p>
|
320
|
+
<p><code>Literal</code> conversion is in many ways similar to <a href="https://docs.python.org/3/library/enum.html">Enum</a> conversion that Robot
|
321
|
+
Framework has supported for long time. <code>Enum</code> conversion has benefits like
|
322
|
+
being able to use a custom documentation and it is typically better when using
|
323
|
+
the same type multiple times. In simple cases being able to just use
|
324
|
+
<code>arg: Literal[...]</code> without defining a new type is very convenient, though.</p>
|
325
|
+
<a name="support-stringified-types-like-list-int-and-int-float"></a>
|
326
|
+
<h4>Support "stringified" types like <code>'list[int]'</code> and <code>'int | float'</code>
|
327
|
+
</h4>
|
328
|
+
<p>Python's type hinting syntax has evolved so that generic types can be parameterized
|
329
|
+
like <code>list[int]</code> (new in <a href="https://peps.python.org/pep-0585">Python 3.9</a>) and unions written as <code>int | float</code>
|
330
|
+
(new in <a href="https://peps.python.org/pep-0604">Python 3.10</a>). Using these constructs with older Python versions causes
|
331
|
+
errors, but Python type checkers support also "stringified" type hints like
|
332
|
+
<code>'list[int]'</code> and <code>'int | float'</code> that work regardless the Python version.</p>
|
333
|
+
<p>Support for stringified generics and unions has now been added also to
|
334
|
+
Robot Framework's argument conversion (<a href="https://github.com/robotframework/robotframework/issues/4711">#4711</a>). For example,
|
335
|
+
the following typing now also works with Python 3.8:</p>
|
336
|
+
<pre lang="python">
|
337
|
+
def example(a: 'list[int]', b: 'int | float'):
|
338
|
+
...
|
339
|
+
</pre>
|
340
|
+
<p>These stringified types are also compatible with the Remote library API and other
|
341
|
+
scenarios where using actual types is not possible.</p>
|
342
|
+
<a name="tags-set-globally-can-be-removed-using-tag-syntax"></a>
|
343
|
+
<h3><a href="#toc-entry-8">Tags set globally can be removed using <code>-tag</code> syntax</a></h3>
|
344
|
+
<p>Individual tests and keywords can nowadays remove tags that have been set in
|
345
|
+
the Settings section with <code>Test Tags</code> or <code>Keyword Tags</code> settings by using
|
346
|
+
the <code>-tag</code> syntax with their own <code>[Tags]</code> setting (<a href="https://github.com/robotframework/robotframework/issues/4374">#4374</a>). For example,
|
347
|
+
tests <code>T1</code> and <code>T3</code> below get tags <code>all</code> and <code>most</code>, and test <code>T2</code> gets
|
348
|
+
tags <code>all</code> and <code>one</code>:</p>
|
349
|
+
<pre lang="robotframework">
|
350
|
+
*** Settings ***
|
351
|
+
Test Tags all most
|
352
|
+
|
353
|
+
*** Test Cases ***
|
354
|
+
T1
|
355
|
+
No Operation
|
356
|
+
T2
|
357
|
+
[Tags] one -most
|
358
|
+
No Operation
|
359
|
+
T3
|
360
|
+
No Operation
|
361
|
+
</pre>
|
362
|
+
<p>With tests it is possible to get the same effect by using the <code>Default Tags</code>
|
363
|
+
setting and overriding it where needed. That syntax is, however, considered
|
364
|
+
deprecated (<a href="https://github.com/robotframework/robotframework/issues/4365">#4365</a>) and using the new <code>-tag</code> syntax is recommended. With
|
365
|
+
keywords there was no similar functionality earlier.</p>
|
366
|
+
<a name="dynamic-and-hybrid-library-apis-support-asynchronous-execution"></a>
|
367
|
+
<h3><a href="#toc-entry-9">Dynamic and hybrid library APIs support asynchronous execution</a></h3>
|
368
|
+
<p>Dynamic and hybrid libraries nowadays support asynchronous execution.
|
369
|
+
In practice the special methods like <code>get_keyword_names</code> and <code>run_keyword</code>
|
370
|
+
can be implemented as async methods (<a href="https://github.com/robotframework/robotframework/issues/4803">#4803</a>).</p>
|
371
|
+
<p>Async support was added to the normal static library API in Robot Framework
|
372
|
+
6.1 (<a href="https://github.com/robotframework/robotframework/issues/4089">#4089</a>). A bug related to handling asynchronous keywords if execution
|
373
|
+
is stopped gracefully has also been fixed (<a href="https://github.com/robotframework/robotframework/issues/4808">#4808</a>).</p>
|
374
|
+
<a name="timestamps-in-result-model-and-output-xml-use-standard-format"></a>
|
375
|
+
<h3><a href="#toc-entry-10">Timestamps in result model and output.xml use standard format</a></h3>
|
376
|
+
<p>Timestamps used in the result model and stored to the output.xml file used custom
|
377
|
+
format like <code>20231107 19:57:01.123</code> earlier. Non-standard formats are seldom
|
378
|
+
a good idea, and in this case parsing the custom format turned out to be slow
|
379
|
+
as well.</p>
|
380
|
+
<p>Nowadays the result model stores timestamps as standard <a href="https://docs.python.org/3/library/datetime.html#datetime-objects">datetime</a> objects and
|
381
|
+
elapsed times as a <a href="https://docs.python.org/3/library/datetime.html#timedelta-objects">timedelta</a> (<a href="https://github.com/robotframework/robotframework/issues/4258">#4258</a>). This makes creating timestamps and
|
382
|
+
operating with them more convenient and considerably faster. The new objects can
|
383
|
+
be accessed via <code>start_time</code>, <code>end_time</code> and <code>elapsed_time</code> attributes that were
|
384
|
+
added as forward compatibility already in Robot Framework 6.1 (<a href="https://github.com/robotframework/robotframework/issues/4765">#4765</a>).
|
385
|
+
Old information is still available via the old <code>starttime</code>, <code>endtime</code> and
|
386
|
+
<code>elapsedtime</code> attributes, so this change is fully backwards compatible.</p>
|
387
|
+
<p>The timestamp format in output.xml has also been changed from the custom
|
388
|
+
<code>YYYYMMDD HH:MM:SS.mmm</code> format to <a href="https://en.wikipedia.org/wiki/ISO_8601">ISO 8601</a> compatible
|
389
|
+
<code>YYYY-MM-DDTHH:MM:SS.mmmmmm</code>. Using a standard format makes it
|
390
|
+
easier to process output.xml files, but this change also has big positive
|
391
|
+
performance effect. Now that the result model stores timestamps as <a href="https://docs.python.org/3/library/datetime.html#datetime-objects">datetime</a>
|
392
|
+
objects, formatting and parsing them with the available <a href="https://docs.python.org/3/library/datetime.html#datetime.datetime.isoformat">isoformat()</a> and
|
393
|
+
<a href="https://docs.python.org/3/library/datetime.html#datetime.datetime.fromisoformat">fromisoformat()</a> methods is very fast compared to custom formatting and parsing.</p>
|
394
|
+
<p>A related change is that instead of storing start and end times of each executed
|
395
|
+
item in output.xml, we nowadays store their start and elapsed times. Elapsed times
|
396
|
+
are represented as floats denoting seconds. Having elapsed times directly available
|
397
|
+
is a lot more convenient than calculating them based on start and end times.
|
398
|
+
Storing start and elapsed times also takes less space than storing start and end times.</p>
|
399
|
+
<p>As the result of these changes, times are available in the result model and in
|
400
|
+
output.xml in higher precision than earlier. Earlier times were stored in millisecond
|
401
|
+
granularity, but nowadays they use microseconds. Logs and reports still use milliseconds,
|
402
|
+
but that can be changed in the future if there are needs.</p>
|
403
|
+
<p>Changes to output.xml are backwards incompatible and affect all external tools
|
404
|
+
that process timestamps. This is discussed more in <a href="#changes-to-output-xml">Changes to output.xml</a>
|
405
|
+
section below along with other output.xml changes.</p>
|
406
|
+
<a name="dark-mode-support-to-report-and-log"></a>
|
407
|
+
<h3><a href="#toc-entry-11">Dark mode support to report and log</a></h3>
|
408
|
+
<p>Report and log got a new dark mode (<a href="https://github.com/robotframework/robotframework/issues/3725">#3725</a>). It is enabled automatically based
|
409
|
+
on browser and operating system preferences, but there is also a toggle to
|
410
|
+
switch between the modes.</p>
|
411
|
+
<a name="backwards-incompatible-changes"></a>
|
412
|
+
<h2><a href="#toc-entry-12">Backwards incompatible changes</a></h2>
|
413
|
+
<a name="python-3-6-and-3-7-are-no-longer-supported"></a>
|
414
|
+
<h3><a href="#toc-entry-13">Python 3.6 and 3.7 are no longer supported</a></h3>
|
415
|
+
<p>Robot Framework 7.0 requires Python 3.8 or newer (<a href="https://github.com/robotframework/robotframework/issues/4294">#4294</a>). The last version
|
416
|
+
that supports Python 3.6 and 3.7 is Robot Framework 6.1.1.</p>
|
417
|
+
<a name="changes-to-output-xml"></a>
|
418
|
+
<h3><a href="#toc-entry-14">Changes to output.xml</a></h3>
|
419
|
+
<p>The output.xml file has changed in different ways making Robot Framework 7.0
|
420
|
+
incompatible with external tools processing output.xml files until these tools
|
421
|
+
are updated. We try to avoid this kind of breaking changes, but in this case
|
422
|
+
especially the changes to timestamps were considered so important that we
|
423
|
+
eventually would have needed to do them anyway.</p>
|
424
|
+
<p>Due to the changes being relatively big, it can take some time before external
|
425
|
+
tools are updated. To allow users to take Robot Framework 7.0 into use also
|
426
|
+
if they depend on an incompatible tool, it is possible to use the new
|
427
|
+
<code>--legacy-output</code> option both as part of execution and with the Rebot tool
|
428
|
+
to generate output.xml files that are compatible with older versions.</p>
|
429
|
+
<a name="timestamp-related-changes"></a>
|
430
|
+
<h4>Timestamp related changes</h4>
|
431
|
+
<p>The biggest changes in output.xml are related to timestamps (<a href="https://github.com/robotframework/robotframework/issues/4258">#4258</a>).
|
432
|
+
With earlier versions start and end times of executed items, as well as timestamps
|
433
|
+
of the logged messages, were stored using a custom <code>YYYYMMDD HH:MM:SS.mmm</code> format,
|
434
|
+
but nowadays the format is <a href="https://en.wikipedia.org/wiki/ISO_8601">ISO 8601</a> compatible <code>YYYY-MM-DDTHH:MM:SS.mmmmmm</code>.
|
435
|
+
In addition to that, instead of saving start and end times to <code>starttime</code> and
|
436
|
+
<code>endtime</code> attributes and message times to <code>timestamp</code>, start and elapsed times
|
437
|
+
are now stored to <code>start</code> and <code>elapsed</code> attributes and message times to <code>time</code>.</p>
|
438
|
+
<p>Examples:</p>
|
439
|
+
<pre lang="xml">
|
440
|
+
<!-- Old format -->
|
441
|
+
<msg timestamp="20231108 15:36:34.278" level="INFO">Hello world!</msg>
|
442
|
+
<status status="PASS" starttime="20231108 15:37:35.046" endtime="20231108 15:37:35.046"/>
|
443
|
+
|
444
|
+
<!-- New format -->
|
445
|
+
<msg time="2023-11-08T15:36:34.278343" level="INFO">Hello world!</msg>
|
446
|
+
<status status="PASS" start="2023-11-08T15:37:35.046153" elapsed="0.000161"/>
|
447
|
+
</pre>
|
448
|
+
<p>The new format is standard compliant, contains more detailed times, makes the elapsed
|
449
|
+
time directly available and makes the <code><status></code> elements over 10% shorter.
|
450
|
+
These are all great benefits, but we are still sorry for all the extra work
|
451
|
+
this causes for those developing tools that process output.xml files.</p>
|
452
|
+
<a name="keyword-name-related-changes"></a>
|
453
|
+
<h4>Keyword name related changes</h4>
|
454
|
+
<p>How keyword names are stored in output.xml has changed slightly (<a href="https://github.com/robotframework/robotframework/issues/4884">#4884</a>).
|
455
|
+
With each executed keywords we store both the name of the keyword and the name
|
456
|
+
of the library or resource file containing it. Earlier the latter was stored to
|
457
|
+
attribute <code>library</code> also with resource files, but nowadays the attribute is generic
|
458
|
+
<code>owner</code>. In addition to <code>owner</code> being a better name in general, it also
|
459
|
+
matches the new <code>owner</code> attribute keywords in the result model have.</p>
|
460
|
+
<p>Another change is that the original name stored with keywords using embedded
|
461
|
+
arguments is nowadays in <code>source_name</code> attribute when it used to be in <code>sourcename</code>.
|
462
|
+
This change was done to make the attribute consistent with the attribute in
|
463
|
+
the result model.</p>
|
464
|
+
<p>Examples:</p>
|
465
|
+
<pre lang="xml">
|
466
|
+
<!-- Old format -->
|
467
|
+
<kw name="Log" library="BuiltIn">...</kw>
|
468
|
+
<kw name="Number of horses should be" sourcename="Number of ${animals} should be" library="my_resource">...</kw>
|
469
|
+
|
470
|
+
<!-- New format -->
|
471
|
+
<kw name="Log" owner="BuiltIn">...</kw>
|
472
|
+
<kw name="Number of horses should be" source_name="Number of ${animals} should be" owner="my_resource">...</kw>
|
473
|
+
</pre>
|
474
|
+
<a name="other-changes"></a>
|
475
|
+
<h4>Other changes</h4>
|
476
|
+
<p>Nowadays keywords and control structures can have a message. Messages are represented
|
477
|
+
as the text of the <code><status></code> element, and they have been present already earlier with
|
478
|
+
tests and suites. Related to this, control structured cannot anymore have <code><doc></code>.
|
479
|
+
(<a href="https://github.com/robotframework/robotframework/issues/4883">#4883</a>)</p>
|
480
|
+
<p>These changes should not cause problems for tools processing output.xml files,
|
481
|
+
but storing messages with each failed keyword and control structure may
|
482
|
+
increase the output.xml size.</p>
|
483
|
+
<a name="schema-updates"></a>
|
484
|
+
<h4>Schema updates</h4>
|
485
|
+
<p>The output.xml schema has been updated and can be found via
|
486
|
+
<a href="https://github.com/robotframework/robotframework/tree/master/doc/schema/">https://github.com/robotframework/robotframework/tree/master/doc/schema/</a>.</p>
|
487
|
+
<a name="changes-to-result-model"></a>
|
488
|
+
<h3><a href="#toc-entry-15">Changes to result model</a></h3>
|
489
|
+
<p>There have been some changes to the result model that unfortunately affect
|
490
|
+
external tools using it. The main motivation for these changes has been
|
491
|
+
cleaning up the model before creating a JSON representation for it (<a href="https://github.com/robotframework/robotframework/issues/4847">#4847</a>).</p>
|
492
|
+
<a name="changes-related-to-keyword-names"></a>
|
493
|
+
<h4>Changes related to keyword names</h4>
|
494
|
+
<p>The biggest changes are related to keyword names (<a href="https://github.com/robotframework/robotframework/issues/4884">#4884</a>). Earlier <code>Keyword</code>
|
495
|
+
objects had a <code>name</code> attribute that contained the full keyword name like
|
496
|
+
<code>BuiltIn.Log</code>. The actual keyword name and the name of the library or resource
|
497
|
+
file that the keyword belonged to were in <code>kwname</code> and <code>libname</code> attributes,
|
498
|
+
respectively. In addition to these, keywords using embedded arguments also had
|
499
|
+
a <code>sourcename</code> attribute containing the original keyword name.</p>
|
500
|
+
<p>Due to reasons explained in <a href="https://github.com/robotframework/robotframework/issues/4884">#4884</a>, the following changes have been made
|
501
|
+
in Robot Framework 7.0:</p>
|
502
|
+
<ul>
|
503
|
+
<li>Old <code>kwname</code> is renamed to <code>name</code>. This is consistent with the execution side <code>Keyword</code>.</li>
|
504
|
+
<li>Old <code>libname</code> is renamed to generic <code>owner</code>.</li>
|
505
|
+
<li>New <code>full_name</code> is introduced to replace the old <code>name</code>.</li>
|
506
|
+
<li>
|
507
|
+
<code>sourcename</code> is renamed to <code>source_name</code>.</li>
|
508
|
+
<li>
|
509
|
+
<code>kwname</code>, <code>libname</code> and <code>sourcename</code> are preserved as properties. They are considered
|
510
|
+
deprecated, but accessing them does not cause a deprecation warning yet.</li>
|
511
|
+
</ul>
|
512
|
+
<p>The backwards incompatible part of this change is changing the meaning of the
|
513
|
+
<code>name</code> attribute. It used to be a read-only property yielding the full name
|
514
|
+
like <code>BuiltIn.Log</code>, but now it is a normal attribute that contains just the actual
|
515
|
+
keyword name like <code>Log</code>. All other old attributes have been preserved as properties
|
516
|
+
and code using them does not need to be updated immediately.</p>
|
517
|
+
<a name="deprecated-attributes-have-been-removed"></a>
|
518
|
+
<h4>Deprecated attributes have been removed</h4>
|
519
|
+
<p>The following attributes that were deprecated already in Robot Framework 4.0
|
520
|
+
have been removed (<a href="https://github.com/robotframework/robotframework/issues/4846">#4846</a>):</p>
|
521
|
+
<ul>
|
522
|
+
<li>
|
523
|
+
<code>TestSuite.keywords</code>. Use <code>TestSuite.setup</code> and <code>TestSuite.teardown</code> instead.</li>
|
524
|
+
<li>
|
525
|
+
<code>TestCase.keywords</code>. Use <code>TestCase.body</code>, <code>TestCase.setup</code> and <code>TestCase.teardown</code> instead.</li>
|
526
|
+
<li>
|
527
|
+
<code>Keyword.keywords</code>. Use <code>Keyword.body</code> and <code>Keyword.teardown</code> instead.</li>
|
528
|
+
<li>
|
529
|
+
<code>Keyword.children</code>. Use <code>Keyword.body</code> and <code>Keyword.teardown</code> instead.</li>
|
530
|
+
<li>
|
531
|
+
<code>TestCase.critical</code>. The whole criticality concept has been removed.</li>
|
532
|
+
</ul>
|
533
|
+
<p>Additionally, <code>TestSuite.keywords</code> and <code>TestCase.keywords</code> have been removed
|
534
|
+
from the execution model.</p>
|
535
|
+
<a name="changes-to-parsing-model"></a>
|
536
|
+
<h3><a href="#toc-entry-16">Changes to parsing model</a></h3>
|
537
|
+
<p>There have been some changes also to the parsing model:</p>
|
538
|
+
<ul>
|
539
|
+
<li>
|
540
|
+
<p>The node representing the deprecated <code>[Return]</code> setting has been renamed from
|
541
|
+
<code>Return</code> to <code>ReturnSetting</code>. At the same time, the node representing the
|
542
|
+
<code>RETURN</code> statement has been renamed from <code>ReturnStatement</code> to <code>Return</code> (<a href="https://github.com/robotframework/robotframework/issues/4939">#4939</a>).</p>
|
543
|
+
<p>To ease transition, <code>ReturnSetting</code> has existed as an alias for <code>Return</code> starting
|
544
|
+
from Robot Framework 6.1 (<a href="https://github.com/robotframework/robotframework/issues/4656">#4656</a>) and <code>ReturnStatement</code> is preserved as an alias
|
545
|
+
now. In addition to that, the <code>ModelVisitor</code> base class has special handling for
|
546
|
+
<code>visit_ReturnSetting</code> and <code>visit_ReturnStatement</code> visitor methods so that they work
|
547
|
+
correctly with <code>ReturnSetting</code> and <code>ReturnStatement</code> with Robot Framework 6.1 and
|
548
|
+
newer. Issue <a href="https://github.com/robotframework/robotframework/issues/4939">#4939</a> explains this in more detail and has a concrete example
|
549
|
+
how to support also older Robot Framework versions.</p>
|
550
|
+
</li>
|
551
|
+
<li>
|
552
|
+
<p>The node representing the <code>Test Tags</code> setting as well as the deprecated
|
553
|
+
<code>Force Tags</code> setting has been renamed from <code>ForceTags</code> to <code>TestTags</code> (<a href="https://github.com/robotframework/robotframework/issues/4385">#4385</a>).
|
554
|
+
<code>ModelVisitor</code> has special handling for the <code>visit_ForceTags</code> method so
|
555
|
+
that it will continue to work also after the change.</p>
|
556
|
+
</li>
|
557
|
+
<li>
|
558
|
+
<p>The token type used with <code>AS</code> (or <code>WITH NAME</code>) in library imports has been changed
|
559
|
+
to <code>Token.AS</code> (<a href="https://github.com/robotframework/robotframework/issues/4375">#4375</a>). <code>Token.WITH_NAME</code> still exists as an alias for <code>Token.AS</code>.</p>
|
560
|
+
</li>
|
561
|
+
<li>
|
562
|
+
<p>Statement <code>type</code> and <code>tokens</code> have been moved from <code>_fields</code> to <code>_attributes</code> (<a href="https://github.com/robotframework/robotframework/issues/4912">#4912</a>).
|
563
|
+
This may affect debugging the model.</p>
|
564
|
+
</li>
|
565
|
+
</ul>
|
566
|
+
<a name="changes-to-libdoc-spec-files"></a>
|
567
|
+
<h3><a href="#toc-entry-17">Changes to Libdoc spec files</a></h3>
|
568
|
+
<p>The following deprecated constructs have been removed from Libdoc spec files (<a href="https://github.com/robotframework/robotframework/issues/4667">#4667</a>):</p>
|
569
|
+
<ul>
|
570
|
+
<li>
|
571
|
+
<code>datatypes</code> have been removed from XML or JSON spec files. They were deprecated in
|
572
|
+
favor of <code>typedocs</code> already in Robot Framework 5.0 (<a href="https://github.com/robotframework/robotframework/issues/4160">#4160</a>).</li>
|
573
|
+
<li>Type names are not anymore written to XML specs as content of the <code><type></code> elements.
|
574
|
+
The name is available as the <code>name</code> attribute of <code><type></code> elements since
|
575
|
+
Robot Framework 6.1 (<a href="https://github.com/robotframework/robotframework/issues/4538">#4538</a>).</li>
|
576
|
+
<li>
|
577
|
+
<code>types</code> and <code>typedocs</code> attributes have been removed from arguments in JSON specs.
|
578
|
+
The <code>type</code> attribute introduced in RF 6.1 (<a href="https://github.com/robotframework/robotframework/issues/4538">#4538</a>) needs to be used instead.</li>
|
579
|
+
</ul>
|
580
|
+
<p>Libdoc schema files have been updated and can be found via
|
581
|
+
<a href="https://github.com/robotframework/robotframework/tree/master/doc/schema/">https://github.com/robotframework/robotframework/tree/master/doc/schema/</a>.</p>
|
582
|
+
<a name="changes-to-selecting-tests-with-suite-test-and-include"></a>
|
583
|
+
<h3><a href="#toc-entry-18">Changes to selecting tests with <code>--suite</code>, <code>--test</code> and <code>--include</code></a></h3>
|
584
|
+
<p>There are two changes related to selecting tests:</p>
|
585
|
+
<ul>
|
586
|
+
<li>When using <code>--test</code> and <code>--include</code> together, tests matching either of them
|
587
|
+
are selected (<a href="https://github.com/robotframework/robotframework/issues/4721">#4721</a>). Earlier tests need to match both options to be selected.</li>
|
588
|
+
<li>When selecting a suite using its parent suite as a prefix like <code>--suite parent.suite</code>,
|
589
|
+
the given name must match the full suite name (<a href="https://github.com/robotframework/robotframework/issues/4720">#4720</a>). Earlier it was enough if
|
590
|
+
the prefix matched the closest parent or parents.</li>
|
591
|
+
</ul>
|
592
|
+
<a name="other-backwards-incompatible-changes"></a>
|
593
|
+
<h3><a href="#toc-entry-19">Other backwards incompatible changes</a></h3>
|
594
|
+
<ul>
|
595
|
+
<li>The default value of the <code>stdin</code> argument used with <code>Process</code> library keyword
|
596
|
+
has been changed from <code>subprocess.PIPE</code> to <code>None</code> (<a href="https://github.com/robotframework/robotframework/issues/4103">#4103</a>). This change ought
|
597
|
+
to avoid processes hanging in some cases. Those who depend on the old behavior
|
598
|
+
need to use <code>stdin=PIPE</code> explicitly to enable that.</li>
|
599
|
+
<li>When type hints are specified as strings, they must use format <code>type</code>, <code>type[param]</code>,
|
600
|
+
<code>type[p1, p2]</code> or <code>t1 | t2</code> (<a href="https://github.com/robotframework/robotframework/issues/4711">#4711</a>). Using other formats will cause errors taking
|
601
|
+
keywords into use. In practice problems occur if the special characters <code>[</code>, <code>]</code>, <code>,</code>
|
602
|
+
and <code>|</code> occur in unexpected places. For example, <code>arg: "Hello, world!"</code> will cause
|
603
|
+
an error due to the comma.</li>
|
604
|
+
<li>
|
605
|
+
<code>datetime</code>, <code>date</code> and <code>timedelta</code> objects are sent over the Remote interface
|
606
|
+
differently than earlier (<a href="https://github.com/robotframework/robotframework/issues/4784">#4784</a>). They all used to be converted to strings, but
|
607
|
+
nowadays <code>datetime</code> is sent as-is, <code>date</code> is converted to <code>datetime</code> and sent like
|
608
|
+
that, and <code>timedelta</code> is converted to a <code>float</code> by using <code>timedelta.total_seconds()</code>.</li>
|
609
|
+
<li>Argument conversion support with <code>collections.abc.ByteString</code> has been removed (<a href="https://github.com/robotframework/robotframework/issues/4983">#4983</a>).
|
610
|
+
The reason is that <code>ByteString</code> is deprecated and will be removed in Python 3.14.
|
611
|
+
It has not been too often needed, but if you happen to use it, you can change
|
612
|
+
<code>arg: ByteString</code> to <code>arg: bytes | bytearray</code> and the functionality
|
613
|
+
stays exactly the same.</li>
|
614
|
+
<li>Paths passed to result file related listener version 3 methods like <code>output_file</code>
|
615
|
+
and <code>log_file</code> have been changed from strings to <code>pathlib.Path</code> objects (<a href="https://github.com/robotframework/robotframework/issues/4988">#4988</a>).
|
616
|
+
Most of the time both kinds of paths work interchangeably, so this change is unlikely
|
617
|
+
to cause issues. If you need to handle these paths as strings, they can be converted
|
618
|
+
by using <code>str(path)</code>.</li>
|
619
|
+
<li>
|
620
|
+
<code>robot.utils.normalize</code> does not anymore support bytes (<a href="https://github.com/robotframework/robotframework/issues/4936">#4936</a>).</li>
|
621
|
+
<li>Deprecated <code>accept_plain_values</code> argument has been removed from the
|
622
|
+
<code>timestr_to_secs</code> utility function (<a href="https://github.com/robotframework/robotframework/issues/4861">#4861</a>).</li>
|
623
|
+
</ul>
|
624
|
+
<a name="deprecations"></a>
|
625
|
+
<h2><a href="#toc-entry-20">Deprecations</a></h2>
|
626
|
+
<a name="return-setting"></a>
|
627
|
+
<h3><a href="#toc-entry-21"><code>[Return]</code> setting</a></h3>
|
628
|
+
<p>The <code>[Return]</code> setting for specifying the return value from user keywords has
|
629
|
+
been "loudly" deprecated (<a href="https://github.com/robotframework/robotframework/issues/4876">#4876</a>). It has been "silently" deprecated since
|
630
|
+
Robot Framework 5.0 when the much more versatile <code>RETURN</code> setting was introduced
|
631
|
+
(<a href="https://github.com/robotframework/robotframework/issues/4078">#4078</a>), but now using it will cause a deprecation warning. The plan is to
|
632
|
+
preserve the <code>[Return]</code> setting at least until Robot Framework 8.0.</p>
|
633
|
+
<p>If you have lot of data that uses <code>[Return]</code>, the easiest way to update it is
|
634
|
+
using the <a href="https://robotidy.readthedocs.io">Robotidy</a> tool that can convert <code>[Return]</code> to <code>RETURN</code> automatically.
|
635
|
+
If you have data that is executed also with Robot Framework versions that do
|
636
|
+
not support <code>RETURN</code>, you can use the <code>Return From Keyword</code> keyword instead.
|
637
|
+
That keyword will eventually be deprecated and removed as well, though.</p>
|
638
|
+
<a name="singular-section-headers"></a>
|
639
|
+
<h3><a href="#toc-entry-22">Singular section headers</a></h3>
|
640
|
+
<p>Using singular section headers like <code>*** Test Case ***</code> or <code>*** Setting ***</code>
|
641
|
+
nowadays causes a deprecation warning (<a href="https://github.com/robotframework/robotframework/issues/4432">#4432</a>). They were silently deprecated
|
642
|
+
in Robot Framework 6.0 for reasons explained in issue <a href="https://github.com/robotframework/robotframework/issues/4431">#4431</a>.</p>
|
643
|
+
<a name="deprecated-attributes-in-parsing-running-and-result-models"></a>
|
644
|
+
<h3><a href="#toc-entry-23">Deprecated attributes in parsing, running and result models</a></h3>
|
645
|
+
<ul>
|
646
|
+
<li>In the parsing model, <code>For.variables</code>, <code>ForHeader.variables</code>, <code>Try.variable</code> and
|
647
|
+
<code>ExceptHeader.variable</code> attributes have been deprecated in favor of the new <code>assign</code>
|
648
|
+
attribute (<a href="https://github.com/robotframework/robotframework/issues/4708">#4708</a>).</li>
|
649
|
+
<li>In running and result models, <code>For.variables</code> and <code>TryBranch.variable</code> have been
|
650
|
+
deprecated in favor of the new <code>assign</code> attribute (<a href="https://github.com/robotframework/robotframework/issues/4708">#4708</a>).</li>
|
651
|
+
<li>In the result model, control structures like <code>FOR</code> were earlier modeled so that they
|
652
|
+
looked like keywords. Nowadays they are considered totally different objects and
|
653
|
+
their keyword specific attributes <code>name</code>, <code>kwnane</code>, <code>libname</code>, <code>doc</code>, <code>args</code>,
|
654
|
+
<code>assign</code>, <code>tags</code> and <code>timeout</code> have been deprecated (<a href="https://github.com/robotframework/robotframework/issues/4846">#4846</a>).</li>
|
655
|
+
<li>
|
656
|
+
<code>starttime</code>, <code>endtime</code> and <code>elapsed</code> time attributes in the result model have been
|
657
|
+
silently deprecated (<a href="https://github.com/robotframework/robotframework/issues/4258">#4258</a>). Accessing them does not yet cause a deprecation
|
658
|
+
warning, but users are recommended to use <code>start_time</code>, <code>end_time</code> and
|
659
|
+
<code>elapsed_time</code> attributes that are available since Robot Framework 6.1.</li>
|
660
|
+
<li>
|
661
|
+
<code>kwname</code>, <code>libname</code> and <code>sourcename</code> attributes used by the <code>Keyword</code> object
|
662
|
+
in the result model have been silently deprecated (<a href="https://github.com/robotframework/robotframework/issues/4884">#4884</a>). New code should use
|
663
|
+
<code>name</code>, <code>owner</code> and <code>source_name</code> instead.</li>
|
664
|
+
</ul>
|
665
|
+
<a name="other-deprecated-features"></a>
|
666
|
+
<h3><a href="#toc-entry-24">Other deprecated features</a></h3>
|
667
|
+
<ul>
|
668
|
+
<li>Using embedded arguments with a variable that has a value not matching custom
|
669
|
+
embedded argument patterns nowadays causes a deprecation warning (<a href="https://github.com/robotframework/robotframework/issues/4524">#4524</a>).
|
670
|
+
Earlier variables used as embedded arguments were always accepted without
|
671
|
+
validating values.</li>
|
672
|
+
<li>Using <code>FOR IN ZIP</code> loops with lists having different lengths without explicitly
|
673
|
+
using <code>mode=SHORTEST</code> has been deprecated (<a href="https://github.com/robotframework/robotframework/issues/4685">#4685</a>). The strict mode where lengths
|
674
|
+
must match will be the default mode in the future.</li>
|
675
|
+
<li>Various utility functions in the <code>robot.utils</code> package that are no longer used
|
676
|
+
by Robot Framework itself, including the whole Python 2/3 compatibility layer,
|
677
|
+
have been deprecated (<a href="https://github.com/robotframework/robotframework/issues/4501">#4501</a>). If you need some of these utils, you can copy
|
678
|
+
their code to your own tool or library. This change may affect existing
|
679
|
+
libraries and tools in the ecosystem.</li>
|
680
|
+
<li>
|
681
|
+
<code>case_insensitive</code> and <code>whitespace_insensitive</code> arguments used by some
|
682
|
+
Collections and String library keywords have been deprecated in favor of
|
683
|
+
<code>ignore_case</code> and <code>ignore_whitespace</code>. The new arguments were added for
|
684
|
+
consistency reasons (<a href="https://github.com/robotframework/robotframework/issues/4954">#4954</a>) and the old arguments will continue to work
|
685
|
+
for the time being.</li>
|
686
|
+
<li>Passing time as milliseconds to the <code>elapsed_time_to_string</code> utility function
|
687
|
+
has been deprecated (<a href="https://github.com/robotframework/robotframework/issues/4862">#4862</a>).</li>
|
688
|
+
</ul>
|
689
|
+
<a name="acknowledgements"></a>
|
690
|
+
<h2><a href="#toc-entry-25">Acknowledgements</a></h2>
|
691
|
+
<p>Robot Framework development is sponsored by the <a href="http://robotframework.org/foundation">Robot Framework Foundation</a>
|
692
|
+
and its over 60 member organizations. If your organization is using Robot Framework
|
693
|
+
and benefiting from it, consider joining the foundation to support its
|
694
|
+
development as well.</p>
|
695
|
+
<p>Robot Framework 7.0 team funded by the foundation consists of <a href="https://github.com/pekkaklarck">Pekka Klärck</a> and
|
696
|
+
<a href="https://github.com/yanne">Janne Härkönen</a> (part time).
|
697
|
+
In addition to work done by them, the community has provided some great contributions:</p>
|
698
|
+
<ul>
|
699
|
+
<li>
|
700
|
+
<a href="https://github.com/ygorpontelo">Ygor Pontelo</a> added async support to the
|
701
|
+
dynamic and hybrid library APIs (<a href="https://github.com/robotframework/robotframework/issues/4803">#4803</a>) and fixed a bug with handling async
|
702
|
+
keywords when execution is stopped gracefully (<a href="https://github.com/robotframework/robotframework/issues/4808">#4808</a>).</li>
|
703
|
+
<li>
|
704
|
+
<a href="https://github.com/totu">Topi 'top1' Tuulensuu</a> fixed a performance regression
|
705
|
+
when using <code>Run Keyword</code> so that the name of the executed keyword contains a variable
|
706
|
+
(<a href="https://github.com/robotframework/robotframework/issues/4659">#4659</a>).</li>
|
707
|
+
<li>
|
708
|
+
<a href="https://github.com/psaikkonen">Pasi Saikkonen</a> added dark mode to reports
|
709
|
+
and logs (<a href="https://github.com/robotframework/robotframework/issues/3725">#3725</a>).</li>
|
710
|
+
<li>
|
711
|
+
<a href="https://github.com/Snooz82">René</a> added return type information to Libdoc's
|
712
|
+
HTML output (<a href="https://github.com/robotframework/robotframework/issues/3017">#3017</a>), fixed <code>DotDict</code> equality comparisons (<a href="https://github.com/robotframework/robotframework/issues/4956">#4956</a>) and
|
713
|
+
helped finalizing the dark mode support (<a href="https://github.com/robotframework/robotframework/issues/3725">#3725</a>).</li>
|
714
|
+
<li>
|
715
|
+
<a href="https://github.com/robinmackaij">Robin</a> added type hints to modules that
|
716
|
+
did not yet have them under the public <code>robot.api</code> package (<a href="https://github.com/robotframework/robotframework/issues/4841">#4841</a>).</li>
|
717
|
+
<li>
|
718
|
+
<a href="https://github.com/MobyNL">Mark Moberts</a> added case-insensitive list and
|
719
|
+
dictionary comparison support to the Collections library (<a href="https://github.com/robotframework/robotframework/issues/4343">#4343</a>).</li>
|
720
|
+
<li>
|
721
|
+
<a href="https://github.com/d-biehl">Daniel Biehl</a> enhanced performance of traversing
|
722
|
+
the parsing model using <code>ModelVisitor</code> (<a href="https://github.com/robotframework/robotframework/issues/4934">#4934</a>).</li>
|
723
|
+
</ul>
|
724
|
+
<p>Big thanks to Robot Framework Foundation, to community members listed above, and to
|
725
|
+
everyone else who has tested preview releases, submitted bug reports, proposed
|
726
|
+
enhancements, debugged problems, or otherwise helped with Robot Framework 7.0
|
727
|
+
development.</p>
|
728
|
+
<p>See you at <a href="https://robocon.io">RoboCon 2024</a> either onsite or online!</p>
|
729
|
+
<div>
|
730
|
+
<div><a href="https://github.com/pekkaklarck">Pekka Klärck</a></div>
|
731
|
+
<div>Robot Framework lead developer</div>
|
732
|
+
</div>
|
733
|
+
<a name="full-list-of-fixes-and-enhancements"></a>
|
734
|
+
<h2><a href="#toc-entry-26">Full list of fixes and enhancements</a></h2>
|
735
|
+
<table>
|
736
|
+
|
737
|
+
|
738
|
+
|
739
|
+
|
740
|
+
|
741
|
+
|
742
|
+
<thead valign="bottom">
|
743
|
+
<tr>
|
744
|
+
<th>ID</th>
|
745
|
+
<th>Type</th>
|
746
|
+
<th>Priority</th>
|
747
|
+
<th>Summary</th>
|
748
|
+
</tr>
|
749
|
+
</thead>
|
750
|
+
<tbody valign="top">
|
751
|
+
<tr>
|
752
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/3296">#3296</a></td>
|
753
|
+
<td>enhancement</td>
|
754
|
+
<td>critical</td>
|
755
|
+
<td>Support keywords and control structures with listener version 3</td>
|
756
|
+
</tr>
|
757
|
+
<tr>
|
758
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/3761">#3761</a></td>
|
759
|
+
<td>enhancement</td>
|
760
|
+
<td>critical</td>
|
761
|
+
<td>Native <code>VAR</code> syntax to create variables inside tests and keywords</td>
|
762
|
+
</tr>
|
763
|
+
<tr>
|
764
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4294">#4294</a></td>
|
765
|
+
<td>enhancement</td>
|
766
|
+
<td>critical</td>
|
767
|
+
<td>Drop Python 3.6 and 3.7 support</td>
|
768
|
+
</tr>
|
769
|
+
<tr>
|
770
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4710">#4710</a></td>
|
771
|
+
<td>enhancement</td>
|
772
|
+
<td>critical</td>
|
773
|
+
<td>Support library keywords with both embedded and normal arguments</td>
|
774
|
+
</tr>
|
775
|
+
<tr>
|
776
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4847">#4847</a></td>
|
777
|
+
<td>enhancement</td>
|
778
|
+
<td>critical</td>
|
779
|
+
<td>Support JSON serialization with result model</td>
|
780
|
+
</tr>
|
781
|
+
<tr>
|
782
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4659">#4659</a></td>
|
783
|
+
<td>bug</td>
|
784
|
+
<td>high</td>
|
785
|
+
<td>Performance regression when using <code>Run Keyword</code> and keyword name contains a variable</td>
|
786
|
+
</tr>
|
787
|
+
<tr>
|
788
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4921">#4921</a></td>
|
789
|
+
<td>bug</td>
|
790
|
+
<td>high</td>
|
791
|
+
<td>Log levels don't work correctly with <code>robot:flatten</code>
|
792
|
+
</td>
|
793
|
+
</tr>
|
794
|
+
<tr>
|
795
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/3725">#3725</a></td>
|
796
|
+
<td>enhancement</td>
|
797
|
+
<td>high</td>
|
798
|
+
<td>Support dark theme with report and log</td>
|
799
|
+
</tr>
|
800
|
+
<tr>
|
801
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4258">#4258</a></td>
|
802
|
+
<td>enhancement</td>
|
803
|
+
<td>high</td>
|
804
|
+
<td>Change timestamps from custom strings to <code>datetime</code> in result model and to ISO 8601 format in output.xml</td>
|
805
|
+
</tr>
|
806
|
+
<tr>
|
807
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4374">#4374</a></td>
|
808
|
+
<td>enhancement</td>
|
809
|
+
<td>high</td>
|
810
|
+
<td>Support removing tags set globally by using <code>-tag</code> syntax with <code>[Tags]</code> setting</td>
|
811
|
+
</tr>
|
812
|
+
<tr>
|
813
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4633">#4633</a></td>
|
814
|
+
<td>enhancement</td>
|
815
|
+
<td>high</td>
|
816
|
+
<td>Automatic argument conversion and validation for <code>Literal</code>
|
817
|
+
</td>
|
818
|
+
</tr>
|
819
|
+
<tr>
|
820
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4711">#4711</a></td>
|
821
|
+
<td>enhancement</td>
|
822
|
+
<td>high</td>
|
823
|
+
<td>Support type aliases in formats <code>'list[int]'</code> and <code>'int | float'</code> in argument conversion</td>
|
824
|
+
</tr>
|
825
|
+
<tr>
|
826
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4803">#4803</a></td>
|
827
|
+
<td>enhancement</td>
|
828
|
+
<td>high</td>
|
829
|
+
<td>Async support to dynamic and hybrid library APIs</td>
|
830
|
+
</tr>
|
831
|
+
<tr>
|
832
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4808">#4808</a></td>
|
833
|
+
<td>bug</td>
|
834
|
+
<td>medium</td>
|
835
|
+
<td>Async keywords are not stopped when execution is stopped gracefully</td>
|
836
|
+
</tr>
|
837
|
+
<tr>
|
838
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4859">#4859</a></td>
|
839
|
+
<td>bug</td>
|
840
|
+
<td>medium</td>
|
841
|
+
<td>Parsing errors in reStructuredText files have no source</td>
|
842
|
+
</tr>
|
843
|
+
<tr>
|
844
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4880">#4880</a></td>
|
845
|
+
<td>bug</td>
|
846
|
+
<td>medium</td>
|
847
|
+
<td>Initially empty test fails even if pre-run modifier adds content to it</td>
|
848
|
+
</tr>
|
849
|
+
<tr>
|
850
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4886">#4886</a></td>
|
851
|
+
<td>bug</td>
|
852
|
+
<td>medium</td>
|
853
|
+
<td>
|
854
|
+
<code>Set Variable If</code> is slow if it has several conditions</td>
|
855
|
+
</tr>
|
856
|
+
<tr>
|
857
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4898">#4898</a></td>
|
858
|
+
<td>bug</td>
|
859
|
+
<td>medium</td>
|
860
|
+
<td>Resolving special variables can fail with confusing message</td>
|
861
|
+
</tr>
|
862
|
+
<tr>
|
863
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4915">#4915</a></td>
|
864
|
+
<td>bug</td>
|
865
|
+
<td>medium</td>
|
866
|
+
<td>
|
867
|
+
<code>cached_property</code> attributes are called when importing library</td>
|
868
|
+
</tr>
|
869
|
+
<tr>
|
870
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4924">#4924</a></td>
|
871
|
+
<td>bug</td>
|
872
|
+
<td>medium</td>
|
873
|
+
<td>WHILE <code>on_limit</code> missing from listener v2 attributes</td>
|
874
|
+
</tr>
|
875
|
+
<tr>
|
876
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4926">#4926</a></td>
|
877
|
+
<td>bug</td>
|
878
|
+
<td>medium</td>
|
879
|
+
<td>WHILE and TRY content are not removed with <code>--removekeywords all</code>
|
880
|
+
</td>
|
881
|
+
</tr>
|
882
|
+
<tr>
|
883
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4945">#4945</a></td>
|
884
|
+
<td>bug</td>
|
885
|
+
<td>medium</td>
|
886
|
+
<td>
|
887
|
+
<code>TypedDict</code> with forward references do not work in argument conversion</td>
|
888
|
+
</tr>
|
889
|
+
<tr>
|
890
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4956">#4956</a></td>
|
891
|
+
<td>bug</td>
|
892
|
+
<td>medium</td>
|
893
|
+
<td>DotDict behaves inconsistent on equality checks. <code>x == y</code> != <code>not x != y</code> and not <code>x != y</code> == <code>not x == y</code>
|
894
|
+
</td>
|
895
|
+
</tr>
|
896
|
+
<tr>
|
897
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4964">#4964</a></td>
|
898
|
+
<td>bug</td>
|
899
|
+
<td>medium</td>
|
900
|
+
<td>Variables set using <code>Set Suite Variable</code> with <code>children=True</code> cannot be properly overwritten</td>
|
901
|
+
</tr>
|
902
|
+
<tr>
|
903
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4980">#4980</a></td>
|
904
|
+
<td>bug</td>
|
905
|
+
<td>medium</td>
|
906
|
+
<td>DateTime library uses deprecated <code>datetime.utcnow()</code>
|
907
|
+
</td>
|
908
|
+
</tr>
|
909
|
+
<tr>
|
910
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4999">#4999</a></td>
|
911
|
+
<td>bug</td>
|
912
|
+
<td>medium</td>
|
913
|
+
<td>XML Library: Double namespace during Element To String</td>
|
914
|
+
</tr>
|
915
|
+
<tr>
|
916
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/5005">#5005</a></td>
|
917
|
+
<td>bug</td>
|
918
|
+
<td>medium</td>
|
919
|
+
<td>
|
920
|
+
<code>Log Variables</code> should not consume iterables</td>
|
921
|
+
</tr>
|
922
|
+
<tr>
|
923
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/3017">#3017</a></td>
|
924
|
+
<td>enhancement</td>
|
925
|
+
<td>medium</td>
|
926
|
+
<td>Add return type to Libdoc specs and HTML output</td>
|
927
|
+
</tr>
|
928
|
+
<tr>
|
929
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4103">#4103</a></td>
|
930
|
+
<td>enhancement</td>
|
931
|
+
<td>medium</td>
|
932
|
+
<td>Process: Change the default <code>stdin</code> behavior from <code>subprocess.PIPE</code> to <code>None</code>
|
933
|
+
</td>
|
934
|
+
</tr>
|
935
|
+
<tr>
|
936
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4302">#4302</a></td>
|
937
|
+
<td>enhancement</td>
|
938
|
+
<td>medium</td>
|
939
|
+
<td>Remove <code>Reserved</code> library</td>
|
940
|
+
</tr>
|
941
|
+
<tr>
|
942
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4343">#4343</a></td>
|
943
|
+
<td>enhancement</td>
|
944
|
+
<td>medium</td>
|
945
|
+
<td>Collections: Support case-insensitive list and dictionary comparisons</td>
|
946
|
+
</tr>
|
947
|
+
<tr>
|
948
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4375">#4375</a></td>
|
949
|
+
<td>enhancement</td>
|
950
|
+
<td>medium</td>
|
951
|
+
<td>Change token type of <code>AS</code> (or <code>WITH NAME</code>) used with library imports to <code>Token.AS</code>
|
952
|
+
</td>
|
953
|
+
</tr>
|
954
|
+
<tr>
|
955
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4385">#4385</a></td>
|
956
|
+
<td>enhancement</td>
|
957
|
+
<td>medium</td>
|
958
|
+
<td>Change the parsing model object produced by <code>Test Tags</code> (and <code>Force Tags</code>) to <code>TestTags</code>
|
959
|
+
</td>
|
960
|
+
</tr>
|
961
|
+
<tr>
|
962
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4432">#4432</a></td>
|
963
|
+
<td>enhancement</td>
|
964
|
+
<td>medium</td>
|
965
|
+
<td>Loudly deprecate singular section headers</td>
|
966
|
+
</tr>
|
967
|
+
<tr>
|
968
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4501">#4501</a></td>
|
969
|
+
<td>enhancement</td>
|
970
|
+
<td>medium</td>
|
971
|
+
<td>Loudly deprecate old Python 2/3 compatibility layer and other deprecated utils</td>
|
972
|
+
</tr>
|
973
|
+
<tr>
|
974
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4524">#4524</a></td>
|
975
|
+
<td>enhancement</td>
|
976
|
+
<td>medium</td>
|
977
|
+
<td>Loudly deprecate variables used as embedded arguments not matching custom patterns</td>
|
978
|
+
</tr>
|
979
|
+
<tr>
|
980
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4545">#4545</a></td>
|
981
|
+
<td>enhancement</td>
|
982
|
+
<td>medium</td>
|
983
|
+
<td>Support creating assigned variable name based on another variable like <code>${${var}} = Keyword</code>
|
984
|
+
</td>
|
985
|
+
</tr>
|
986
|
+
<tr>
|
987
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4667">#4667</a></td>
|
988
|
+
<td>enhancement</td>
|
989
|
+
<td>medium</td>
|
990
|
+
<td>Remove deprecated constructs from Libdoc spec files</td>
|
991
|
+
</tr>
|
992
|
+
<tr>
|
993
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4685">#4685</a></td>
|
994
|
+
<td>enhancement</td>
|
995
|
+
<td>medium</td>
|
996
|
+
<td>Deprecate <code>SHORTEST</code> mode being default with <code>FOR IN ZIP</code> loops</td>
|
997
|
+
</tr>
|
998
|
+
<tr>
|
999
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4708">#4708</a></td>
|
1000
|
+
<td>enhancement</td>
|
1001
|
+
<td>medium</td>
|
1002
|
+
<td>Use <code>assing</code>, not <code>variable</code>, with FOR and TRY/EXCEPT model objects when referring to assigned variables</td>
|
1003
|
+
</tr>
|
1004
|
+
<tr>
|
1005
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4720">#4720</a></td>
|
1006
|
+
<td>enhancement</td>
|
1007
|
+
<td>medium</td>
|
1008
|
+
<td>Require <code>--suite parent.suite</code> to match the full suite name</td>
|
1009
|
+
</tr>
|
1010
|
+
<tr>
|
1011
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4721">#4721</a></td>
|
1012
|
+
<td>enhancement</td>
|
1013
|
+
<td>medium</td>
|
1014
|
+
<td>Change behavior of <code>--test</code> and <code>--include</code> so that they are cumulative</td>
|
1015
|
+
</tr>
|
1016
|
+
<tr>
|
1017
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4747">#4747</a></td>
|
1018
|
+
<td>enhancement</td>
|
1019
|
+
<td>medium</td>
|
1020
|
+
<td>Support <code>[Setup]</code> with user keywords</td>
|
1021
|
+
</tr>
|
1022
|
+
<tr>
|
1023
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4784">#4784</a></td>
|
1024
|
+
<td>enhancement</td>
|
1025
|
+
<td>medium</td>
|
1026
|
+
<td>Remote: Enhance <code>datetime</code>, <code>date</code> and <code>timedelta</code> conversion</td>
|
1027
|
+
</tr>
|
1028
|
+
<tr>
|
1029
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4841">#4841</a></td>
|
1030
|
+
<td>enhancement</td>
|
1031
|
+
<td>medium</td>
|
1032
|
+
<td>Add typing to all modules under <code>robot.api</code>
|
1033
|
+
</td>
|
1034
|
+
</tr>
|
1035
|
+
<tr>
|
1036
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4846">#4846</a></td>
|
1037
|
+
<td>enhancement</td>
|
1038
|
+
<td>medium</td>
|
1039
|
+
<td>Result model: Loudly deprecate not needed attributes and remove already deprecated ones</td>
|
1040
|
+
</tr>
|
1041
|
+
<tr>
|
1042
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4872">#4872</a></td>
|
1043
|
+
<td>enhancement</td>
|
1044
|
+
<td>medium</td>
|
1045
|
+
<td>Control continue-on-failure mode by using recursive and non-recursive tags together</td>
|
1046
|
+
</tr>
|
1047
|
+
<tr>
|
1048
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4876">#4876</a></td>
|
1049
|
+
<td>enhancement</td>
|
1050
|
+
<td>medium</td>
|
1051
|
+
<td>Loudly deprecate <code>[Return]</code> setting</td>
|
1052
|
+
</tr>
|
1053
|
+
<tr>
|
1054
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4877">#4877</a></td>
|
1055
|
+
<td>enhancement</td>
|
1056
|
+
<td>medium</td>
|
1057
|
+
<td>XML: Support ignoring element order with <code>Elements Should Be Equal</code>
|
1058
|
+
</td>
|
1059
|
+
</tr>
|
1060
|
+
<tr>
|
1061
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4883">#4883</a></td>
|
1062
|
+
<td>enhancement</td>
|
1063
|
+
<td>medium</td>
|
1064
|
+
<td>Result model: Add <code>message</code> to keywords and control structures and remove <code>doc</code> from controls</td>
|
1065
|
+
</tr>
|
1066
|
+
<tr>
|
1067
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4884">#4884</a></td>
|
1068
|
+
<td>enhancement</td>
|
1069
|
+
<td>medium</td>
|
1070
|
+
<td>Result model: Enhance storing keyword name</td>
|
1071
|
+
</tr>
|
1072
|
+
<tr>
|
1073
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4896">#4896</a></td>
|
1074
|
+
<td>enhancement</td>
|
1075
|
+
<td>medium</td>
|
1076
|
+
<td>Support <code>separator=<value></code> configuration option with scalar variables in Variables section</td>
|
1077
|
+
</tr>
|
1078
|
+
<tr>
|
1079
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4903">#4903</a></td>
|
1080
|
+
<td>enhancement</td>
|
1081
|
+
<td>medium</td>
|
1082
|
+
<td>Support argument conversion and named arguments with dynamic variable files</td>
|
1083
|
+
</tr>
|
1084
|
+
<tr>
|
1085
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4905">#4905</a></td>
|
1086
|
+
<td>enhancement</td>
|
1087
|
+
<td>medium</td>
|
1088
|
+
<td>Support creating variable name based on another variable like <code>${${VAR}}</code> in Variables section</td>
|
1089
|
+
</tr>
|
1090
|
+
<tr>
|
1091
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4910">#4910</a></td>
|
1092
|
+
<td>enhancement</td>
|
1093
|
+
<td>medium</td>
|
1094
|
+
<td>Make listener v3 the default listener API</td>
|
1095
|
+
</tr>
|
1096
|
+
<tr>
|
1097
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4912">#4912</a></td>
|
1098
|
+
<td>enhancement</td>
|
1099
|
+
<td>medium</td>
|
1100
|
+
<td>Parsing model: Move <code>type</code> and <code>tokens</code> from <code>_fields</code> to <code>_attributes</code>
|
1101
|
+
</td>
|
1102
|
+
</tr>
|
1103
|
+
<tr>
|
1104
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4930">#4930</a></td>
|
1105
|
+
<td>enhancement</td>
|
1106
|
+
<td>medium</td>
|
1107
|
+
<td>BuiltIn: New <code>Reset Log Level</code> keyword for resetting the log level to the original value</td>
|
1108
|
+
</tr>
|
1109
|
+
<tr>
|
1110
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4939">#4939</a></td>
|
1111
|
+
<td>enhancement</td>
|
1112
|
+
<td>medium</td>
|
1113
|
+
<td>Parsing model: Rename <code>Return</code> to <code>ReturnSetting</code> and <code>ReturnStatement</code> to <code>Return</code>
|
1114
|
+
</td>
|
1115
|
+
</tr>
|
1116
|
+
<tr>
|
1117
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4942">#4942</a></td>
|
1118
|
+
<td>enhancement</td>
|
1119
|
+
<td>medium</td>
|
1120
|
+
<td>Add public argument conversion API for libraries and other tools</td>
|
1121
|
+
</tr>
|
1122
|
+
<tr>
|
1123
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4952">#4952</a></td>
|
1124
|
+
<td>enhancement</td>
|
1125
|
+
<td>medium</td>
|
1126
|
+
<td>Collections: Make <code>ignore_order</code> and <code>ignore_keys</code> recursive</td>
|
1127
|
+
</tr>
|
1128
|
+
<tr>
|
1129
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4960">#4960</a></td>
|
1130
|
+
<td>enhancement</td>
|
1131
|
+
<td>medium</td>
|
1132
|
+
<td>Support integer conversion with strings representing whole number floats like <code>'1.0'</code> and <code>'2e10'</code>
|
1133
|
+
</td>
|
1134
|
+
</tr>
|
1135
|
+
<tr>
|
1136
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4976">#4976</a></td>
|
1137
|
+
<td>enhancement</td>
|
1138
|
+
<td>medium</td>
|
1139
|
+
<td>Support string <code>SELF</code> (case-insenstive) when library registers itself as listener</td>
|
1140
|
+
</tr>
|
1141
|
+
<tr>
|
1142
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4979">#4979</a></td>
|
1143
|
+
<td>enhancement</td>
|
1144
|
+
<td>medium</td>
|
1145
|
+
<td>Add <code>robot.result.TestSuite.to/from_xml</code> methods</td>
|
1146
|
+
</tr>
|
1147
|
+
<tr>
|
1148
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4982">#4982</a></td>
|
1149
|
+
<td>enhancement</td>
|
1150
|
+
<td>medium</td>
|
1151
|
+
<td>DateTime: Support <code>datetime.date</code> as an input format with date related keywords</td>
|
1152
|
+
</tr>
|
1153
|
+
<tr>
|
1154
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4983">#4983</a></td>
|
1155
|
+
<td>enhancement</td>
|
1156
|
+
<td>medium</td>
|
1157
|
+
<td>Type conversion: Remove support for deprecated <code>ByteString</code>
|
1158
|
+
</td>
|
1159
|
+
</tr>
|
1160
|
+
<tr>
|
1161
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/5000">#5000</a></td>
|
1162
|
+
<td>enhancement</td>
|
1163
|
+
<td>medium</td>
|
1164
|
+
<td>Nicer API for setting keyword call arguments programmatically</td>
|
1165
|
+
</tr>
|
1166
|
+
<tr>
|
1167
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4934">#4934</a></td>
|
1168
|
+
<td>---</td>
|
1169
|
+
<td>medium</td>
|
1170
|
+
<td>Enhance performance of visiting parsing model</td>
|
1171
|
+
</tr>
|
1172
|
+
<tr>
|
1173
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4621">#4621</a></td>
|
1174
|
+
<td>bug</td>
|
1175
|
+
<td>low</td>
|
1176
|
+
<td>OperatingSystem library docs have broken link / title</td>
|
1177
|
+
</tr>
|
1178
|
+
<tr>
|
1179
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4798">#4798</a></td>
|
1180
|
+
<td>bug</td>
|
1181
|
+
<td>low</td>
|
1182
|
+
<td>
|
1183
|
+
<code>--removekeywords passed</code> doesn't remove test setup and teardown</td>
|
1184
|
+
</tr>
|
1185
|
+
<tr>
|
1186
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4867">#4867</a></td>
|
1187
|
+
<td>bug</td>
|
1188
|
+
<td>low</td>
|
1189
|
+
<td>Original order of dictionaries is not preserved when they are pretty printed in log messages</td>
|
1190
|
+
</tr>
|
1191
|
+
<tr>
|
1192
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4870">#4870</a></td>
|
1193
|
+
<td>bug</td>
|
1194
|
+
<td>low</td>
|
1195
|
+
<td>User keyword teardown missing from running model JSON schema</td>
|
1196
|
+
</tr>
|
1197
|
+
<tr>
|
1198
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4904">#4904</a></td>
|
1199
|
+
<td>bug</td>
|
1200
|
+
<td>low</td>
|
1201
|
+
<td>Importing static variable file with arguments does not fail</td>
|
1202
|
+
</tr>
|
1203
|
+
<tr>
|
1204
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4913">#4913</a></td>
|
1205
|
+
<td>bug</td>
|
1206
|
+
<td>low</td>
|
1207
|
+
<td>Trace log level logs arguments twice for embedded arguments</td>
|
1208
|
+
</tr>
|
1209
|
+
<tr>
|
1210
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4927">#4927</a></td>
|
1211
|
+
<td>bug</td>
|
1212
|
+
<td>low</td>
|
1213
|
+
<td>WARN level missing from the log level selector in log.html</td>
|
1214
|
+
</tr>
|
1215
|
+
<tr>
|
1216
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4967">#4967</a></td>
|
1217
|
+
<td>bug</td>
|
1218
|
+
<td>low</td>
|
1219
|
+
<td>Variables are not resolved in keyword name in WUKS error message</td>
|
1220
|
+
</tr>
|
1221
|
+
<tr>
|
1222
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4861">#4861</a></td>
|
1223
|
+
<td>enhancement</td>
|
1224
|
+
<td>low</td>
|
1225
|
+
<td>Remove deprecated <code>accept_plain_values</code> from <code>timestr_to_secs</code> utility function</td>
|
1226
|
+
</tr>
|
1227
|
+
<tr>
|
1228
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4862">#4862</a></td>
|
1229
|
+
<td>enhancement</td>
|
1230
|
+
<td>low</td>
|
1231
|
+
<td>Deprecate <code>elapsed_time_to_string</code> accepting time as milliseconds</td>
|
1232
|
+
</tr>
|
1233
|
+
<tr>
|
1234
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4864">#4864</a></td>
|
1235
|
+
<td>enhancement</td>
|
1236
|
+
<td>low</td>
|
1237
|
+
<td>Process: Make warning about processes hanging if output buffers get full more visible</td>
|
1238
|
+
</tr>
|
1239
|
+
<tr>
|
1240
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4885">#4885</a></td>
|
1241
|
+
<td>enhancement</td>
|
1242
|
+
<td>low</td>
|
1243
|
+
<td>Add <code>full_name</code> to replace <code>longname</code> to suite and test objects</td>
|
1244
|
+
</tr>
|
1245
|
+
<tr>
|
1246
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4900">#4900</a></td>
|
1247
|
+
<td>enhancement</td>
|
1248
|
+
<td>low</td>
|
1249
|
+
<td>Make keywords and control structures in log look more like original data</td>
|
1250
|
+
</tr>
|
1251
|
+
<tr>
|
1252
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4922">#4922</a></td>
|
1253
|
+
<td>enhancement</td>
|
1254
|
+
<td>low</td>
|
1255
|
+
<td>Change the log level of <code>Set Log Level</code> message from INFO to DEBUG</td>
|
1256
|
+
</tr>
|
1257
|
+
<tr>
|
1258
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4933">#4933</a></td>
|
1259
|
+
<td>enhancement</td>
|
1260
|
+
<td>low</td>
|
1261
|
+
<td>Type conversion: Ignore hyphens when matching enum members</td>
|
1262
|
+
</tr>
|
1263
|
+
<tr>
|
1264
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4935">#4935</a></td>
|
1265
|
+
<td>enhancement</td>
|
1266
|
+
<td>low</td>
|
1267
|
+
<td>Use <code>casefold</code>, not <code>lower</code>, when comparing strings case-insensitively</td>
|
1268
|
+
</tr>
|
1269
|
+
<tr>
|
1270
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4936">#4936</a></td>
|
1271
|
+
<td>enhancement</td>
|
1272
|
+
<td>low</td>
|
1273
|
+
<td>Remove bytes support from <code>robot.utils.normalize</code> function</td>
|
1274
|
+
</tr>
|
1275
|
+
<tr>
|
1276
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4954">#4954</a></td>
|
1277
|
+
<td>enhancement</td>
|
1278
|
+
<td>low</td>
|
1279
|
+
<td>Collections and String: Add <code>ignore_case</code> as alias for <code>case_insensitive</code>
|
1280
|
+
</td>
|
1281
|
+
</tr>
|
1282
|
+
<tr>
|
1283
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4958">#4958</a></td>
|
1284
|
+
<td>enhancement</td>
|
1285
|
+
<td>low</td>
|
1286
|
+
<td>Document <code>robot_running</code> and <code>dry_run_active</code> properties of the BuiltIn library in the User Guide</td>
|
1287
|
+
</tr>
|
1288
|
+
<tr>
|
1289
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4975">#4975</a></td>
|
1290
|
+
<td>enhancement</td>
|
1291
|
+
<td>low</td>
|
1292
|
+
<td>Support <code>times</code> and <code>x</code> suffixes with <code>WHILE</code> limit to make it more compatible with <code>Wait Until Keyword Succeeds</code>
|
1293
|
+
</td>
|
1294
|
+
</tr>
|
1295
|
+
<tr>
|
1296
|
+
<td><a href="https://github.com/robotframework/robotframework/issues/4988">#4988</a></td>
|
1297
|
+
<td>enhancement</td>
|
1298
|
+
<td>low</td>
|
1299
|
+
<td>Change paths passed to listener v3 methods to <code>pathlib.Path</code> instances</td>
|
1300
|
+
</tr>
|
1301
|
+
</tbody>
|
1302
|
+
</table>
|
1303
|
+
<p>Altogether 88 issues. View on the <a href="https://github.com/robotframework/robotframework/issues?q=milestone%3Av7.0">issue tracker</a>.</p>
|