let's see few examples below: Locating an element using ID of the element And input ('#user-name',UIApp_username) And input ('#password',UIApp_password) Locating an element using CSS of the element IMPORTANT: There are some restrictions when using callonce or karate.callSingle() especially within karate-config.js. The Hello World is a great example of REST-ful use of the url when the test focuses on a single REST resource. Match failure messages are much more descriptive and useful, and you get the power of embedded expressions and fuzzy matching. To avoid problems, stick to the pattern of using double-quotes to wrap the JavaScript snippet, and you can use single-quotes within. # but using karate.range() you can even do this ! This roughly corresponds to a cURL argument of -F @myFile=test.pdf. political education It will also return a string which is the actual URL in case you need to use it for further actions in the test script. Note: In GET API request, we do not need to provide the body (payload). The examples above are simple, but a variety of expression shapes are supported on the right hand side of the = symbol. The business of web-services testing requires access to low-level aspects such as HTTP headers, URL-paths, query-parameters, complex JSON or XML payloads and response-codes. And if you do this within a Background: section, it would apply to all Scenario: sections within the *.feature file. Multiple fields can be set in one step using multipart fields. Since templates can be loaded using the classpath: prefix, you can even re-use templates across your projects via Java JAR files. There is also a karate.mapWithKey() for a common need - which is to convert an array of primitives into an array of objects, which is the form that data driven features expect. A callonce is ideally used for only pure JSON. First the JavaScript file, basic-auth.js: And heres how it works in a test-script using the header keyword. The set of built-in functions that start with wait handle all the cases you would need to typically worry about. If you need the position of an element relative to the current viewport, you can pass an extra boolean argument set to true (false will return the absolute position) : 2 string arguments: locator and value to enter. myInt + ''), in some rare cases, you may need to convert a string to a number. // trigger download of latest image with custom file name Standard JavaScript syntax rules apply, but the right-hand-side should begin with the function keyword if declared in-line. If you are new to programming or test-automation, refer to the options for IDE support and the official IntelliJ plugin is recommended. There are examples of calling JVM classes in the section on Java Interop and in the file-upload demo. The not equals operator != works as you would expect: You typically will never need to use the != (not-equals) operator ! Karate also has built-in support for websocket that is based on the async capability and the listen keyword. Note callonce is not supported for a driver instance. And similarly - for specifying the HTTP proxy. Theres a lot going on in the last line above ! For example, it offers API testing, API testing doubles, and API performance testing all in one framework. But this time, the return value from the call step will be a JSON array of the same size as the input array. There are two things that can happen to the returned value. Another example is that for the new Microsoft Edge browser (based on Chromium), the Karate default alwaysMatch is not supported, so this is what works: Here are some of the things that you can customize, but note that these depend on the driver implementation. {2}', id: '#uuid' }, # convenient (and recommended) way to check for array length, # here we enclose in round-brackets to preserve the optional embedded expression, # so that it can be used later in a "match", """ It is worth repeating that in most cases you wont need to set the Content-Type header as Karate will automatically do the right thing depending on the data-type of the request. This is for evaluating arbitrary JavaScript and you are advised to use this only as a last resort ! The scenario expression result is expected to be an array of JSON objects. So you can do this, without needing the https:// part: You can also switch by page index if you know it: This sets context to a chosen frame (or