Skip to content

zikani03/basi

Repository files navigation

basi

basi allow users and developers to author and run Playwright actions using a simple configuration file with less code. Browser automation steps are written in .basi files.

The goal is for the .basi file DSL to be simple enough to hand over to non-technical users.

NOTE: basi is still in very early development. There are no guarantees about API or feature stability.

Using basi Using Playwright with Node JS

Installation

Download a binary from the GitHub Releases and place it on your $PATH.

NOTE: basi depends on Playwright and needs to download some browsers and tools if playwright if it is not already installed. You will notice this the first time you run the test/files

If you want to contribute or build from the source code see the Building section

Once installed you can then run it :

$ basi --help

Example usage

Create a file named example-hn.basi file with the following content:

Goto "https://news.ycombinator.com/login"
Fill "input[name=acct]" "throwaway-username" 
Fill "input[name=pw]" "fakepassword"
Click "input[value=login]"
Screenshot "body" "./test-screenshot.png"

You can now run the file using basi, like so:

$ basi run example-hn.basi

You can use Find to select an element to run assertions on it

Goto "https://github.com/"
Find "Build and ship software on a single, collaborative platform"
ExpectId "hero-section-brand-heading"
Screenshot "body" "./data/test-github.png"

You can setup metadata/configuration for each run in a frontmatter section

ID            : "A random ID to identify the run"
URL           : "https://nndi.cloud/"
Title         : "Navigate to home on nndi"
Headless      : "yes"
Description   : "Navigates to the NNDI website and clicks the Home link"
---
Goto "/"
Click "#navbar > ul > li.active > a"
ExpectAttr "data-nav-section" "home"
Screenshot "body" "./test-nndi.png"

Available actions

Action Arguments Example
Click querySelector Click "#element"
DoubleClick querySelector DoubleClick "#element"
Tap querySelector Tap "#element"
Focus querySelector Focus "#element"
Blur querySelector Blur "#element"
Fill querySelector TEXT Fill "#element" "my input text"
Find textContent or querySelector Find "My Account"
Clear querySelector Clear "#element"
Check querySelector Check "#element"
Uncheck querySelector Uncheck "#element"
FillCheckbox querySelector FillCheckbox "#element"
Press querySelector TEXT Press "#element" "some text"
PressSequentially querySelector TEXT PressSequentially "#element" "some input"
Type querySelector TEXT Type "#element"
Screenshot querySelector TEXT Screenshot "#selector" "filename.png"
Select querySelector TEXT Select "#someSelect" "Value or Label"
SelectOption querySelector TEXT Select "#someSelect" "Value or Label"
SelectMultipleOptions querySelector TEXT SelectMultipleOptions "#someSelect" "Value or Label 1,Value or Label 2,..., Value or Label N"
WaitFor querySelector WaitFor "#element"
WaitForSelector querySelector WaitForSelector "#element"
Goto REGEX Goto "^some-page"
WaitForURL REGEX WaitForURL "^some-page"
GoBack N/A GoBack
GoForward N/A GoForward
Refresh N/A Refresh

Expects

basi implements most of Playwright's Assertions via Expect actions. The following Expect actions are currently supported

Action Arguments Example
ExpectText argument ExpectText "Click Here"
ExpectAttr attributeName argument ExpectAttr "name" "some-name"
ExpectAttribute argument ExpectAttribute "name" "some-name"
ExpectValue argument ExpectValue "something"
ExpectValues argument ExpectValues "something,something"
ExpectAttached None ExpectAttached
ExpectChecked None ExpectChecked
ExpectDisabled None ExpectDisabled
ExpectEditable None ExpectEditable
ExpectEmpty None ExpectEmpty
ExpectEnabled None ExpectEnabled
ExpectFocused None ExpectFocused
ExpectHidden None ExpectHidden
ExpectInViewport None ExpectInViewport
ExpectVisible None ExpectVisible
ExpectToContainClass argument ExpectToContainClass "class-name"
ExpectToContainText argument ExpectToContainText "something"
ExpectAccessibleDescription argument ExpectAccessibleDescription "description"
ExpectAccessibleErrorMessage argument ExpectAccessibleErrorMessage "An error message"
ExpectAccessibleName argument ExpectAccessibleName "An accessible name"
ExpectClass className ExpectClass "a-class-name"
ExpectCSS css-property argument ExpectCSS "display" "flex"
ExpectId argument ExpectId "an-id"

Building

$ git clone https://github.com/zikani03/basi

$ cd basi

$ go build -o basi ./cmd/main.go

$ ./basi --help

# Test with the example file in the repo

$ ./basi run example-hn.basi --url "https://news.ycombinator.com"

LICENSE

Apache 2.0 LICENSE

About

Toolkit for testing web applications and browser automation

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages