Coder Social home page Coder Social logo

smashtest's Introduction

Smashtest • Generate tests fast

npm version Join the chat at https://gitter.im/smashtestio/community

What is Smashtest?

Smashtest is an open-source tool and language for rapidly generating tests.

Greatly speed up your web automated testing by writing tests in a tree-like format.

Trees represent how we think when we're testing. They allow us to list all the permutations that branch off from any given point.

  • Multiple browsers and devices
  • UI and API
  • Run tests in parallel
  • Human-readable steps
  • Awesome live reports
  • Run locally or in CI/CD

Sample test

Open Chrome
Open Firefox
Open Safari

    Navigate to 'site.com'

        Click 'Sign In'

            Type {username:} into 'username box'

                {username} is 'joe'
                {username} is 'bob'
                {username} is 'mary'

                    Verify success

                {username} is 'baduser'

                    Verify error

represents

Test Case 1                        Test Case 2                        Test Case 3
-----------                        -----------                        -----------
Open Chrome                        Open Firefox                       Open Safari
Navigate to 'site.com'             Navigate to 'site.com'             Navigate to 'site.com'
Click 'Sign In'                    Click 'Sign In'                    Click 'Sign In'  
Type 'joe' into 'username box'     Type 'joe' into 'username box'     Type 'joe' into 'username box'
Verify success                     Verify success                     Verify success


Test Case 4                        Test Case 5                        Test Case 6
-----------                        -----------                        -----------
Open Chrome                        Open Firefox                       Open Safari
Navigate to 'site.com'             Navigate to 'site.com'             Navigate to 'site.com'
Click 'Sign In'                    Click 'Sign In'                    Click 'Sign In'  
Type 'bob' into 'username box'     Type 'bob' into 'username box'     Type 'bob' into 'username box'
Verify success                     Verify success                     Verify success


Test Case 7                        Test Case 8                        Test Case 9
-----------                        -----------                        -----------
Open Chrome                        Open Firefox                       Open Safari
Navigate to 'site.com'             Navigate to 'site.com'             Navigate to 'site.com'
Click 'Sign In'                    Click 'Sign In'                    Click 'Sign In'  
Type 'mary' into 'username box'    Type 'mary' into 'username box'    Type 'mary' into 'username box'
Verify success                     Verify success                     Verify success


Test Case 10                       Test Case 11                       Test Case 12
------------                       ------------                       ------------
Open Chrome                        Open Firefox                       Open Safari
Navigate to 'site.com'             Navigate to 'site.com'             Navigate to 'site.com'
Click 'Sign In'                    Click 'Sign In'                    Click 'Sign In'  
Type 'baduser' into 'username box' Type 'baduser' into 'username box' Type 'baduser' into 'username box'
Verify error                       Verify error                       Verify error

which represents

Test Case 1
-----------
let driver = await new Builder().forBrowser('chrome').build();
await driver.get('http://site.com');
let signInButton = await driver.findElement(By.id('#sign-in'));
await signInButton.click();
await driver.wait(until.elementLocated(By.id('#username-box')), 10000);
let usernameBox = await driver.findElement(By.id('#username-box'));
await usernameBox.sendKeys('joe');
await driver.wait(until.elementLocated(By.id('#success-element')), 10000);


Test Case 2
-----------
let driver = await new Builder().forBrowser('firefox').build();
await driver.get('http://site.com');
let signInButton = await driver.findElement(By.id('#sign-in'));
await signInButton.click();
await driver.wait(until.elementLocated(By.id('#username-box')), 10000);
let usernameBox = await driver.findElement(By.id('#username-box'));
await usernameBox.sendKeys('joe');
await driver.wait(until.elementLocated(By.id('#success-element')), 10000);


etc.

Installation

npm install smashtest

Usage

smashtest [.smash files to run] [options]

Use smashtest -? to list options

Full documentation

See smashtest.io for full documentation, setup, tutorials, and screenshots

smashtest's People

Contributors

dependabot[bot] avatar ericgumba avatar gitter-badger avatar juliensz avatar ohioshirt avatar oursin avatar roycethebiker avatar sarimarton avatar smashtestio avatar vptes1 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

smashtest's Issues

Add new step alias 'Click over {{element}}'

We already have Hover over and click {{element}} which is useful many times, where we have to click on an otherwise unclickable target. A very common case is styled and hidden checkboxes.

The problem is that this step name is too long, and many times a Click {{element}} should be converted quickly to a hover-over-and-click one.

For the above reason, I propose to have a Click over {{element}} step which would serve as a minimal counterpart to Click {{element}}

Safari screen shots don't show canvas elements

Steps to repro:

  1. Run these steps:
Open Safari        
    Navigate to "https://pixijs.io/examples/#/demos-basic/container.js"

(can use any page with a canvas element)
2. Observe that the canvas element is visible in the safari window
3. Open report.html in a browser and click on the 'Navigate to ...' step
4. Observe that the screenshot does not have the canvas element

Feature request - ability to disable progress output

Hello, when running Smashtests on a CI/CD server, it would be very useful to have the option to disable progress output. Due to the nature of build agents, the 'terminals' are dumb and as a result the progress output will look like the screenshots below. This makes troubleshooting and tracking very difficult so it would be useful to not have any progress output.

image

image

image

run test show error when use frequency option

ReferenceError: Constants is not defined
when i run smashtest [filename] --min-frequency=med

e.g:
`Open Chrome
nav to 'baidu.com'
type 'test' into 'input[id=kw]' #low
Click 'input[id=su]' #med

    type 'm' into 'input[id=kw]' #high
        Click 'input[id=su]' #med`

Feature request: add easy way to match inside another element

I'm trying to write something along the lines of

Click 'Privacy Policy', inside selector 'footer .legal'

but there doesn't seem to be a way to do it. (The aim is to guarantee that the "Privacy Policy" link clicked is definitely the one in the footer, regardless of what else is on the page.)

This is the best I've managed so far, but it just says Error: The function Click footer privacy policy link cannot be found.

Open Chrome

    Desktop
    Mobile

        Navigate to the site

            - Check the privacy policy

                Click footer privacy policy link

                    Verify at page 'Privacy Policy | Western Sussex CAMRA'

* Navigate to the site {
    props({
        'footer privacy policy link': selector '#page-content > footer .legal a', contains exact 'Privacy Policy'
    })
    Navigate to 'localhost:3000'
}

(I've tried working through the tutorial videos, but I don't learn very well from videos as they take so much time, which I don't have a load of — I find it much easier to learn from written articles. Are there transcripts available?)

Problem report server

Hi,

We have a problem with Report server:

I run this command :
smashtest --test-server=http://localhost:5959/wd/hub --report-domain=localhost:443

but in my nav (chrome Version 76.0.3809.132 64 bits) i have this message

Upgrade Required

and in my console :
2019-08-28_14h38_36

The error is 426 : change protocol for TLS.

Thannk's

mocking geolocation fail

setting latitude and longitude in browser or triggering positioning all indicate failure
image

`open chrome

nav to 'map.baidu.com'
    Mock location to latitude='43.8084544665' longitude='125.3441601259'
        click 'div[id=iploc]'
            click 'div[class="sure-btn sureLoc-btn locbtn"]'
                wait '1' secs
                    click 'div[id=iploc]'
                        wait '2' secs
                            stop all mocks
                                click 'div[id=iploc]'
                                    wait '3' secs              `

Typing into multiple browsers simultaneously intermittently causes ECONNREFUSED error

Open Chrome

    Define locators {
        props({
            'search box': `xpath '//input[@name="q"]'`,
            'search button': `xpath '(//input[@name="btnK"])[1]'`
        });
    }

        Navigate to "google.com"

            Type "Hello" into 'search box'
            Type "Hello" into 'search box'
            Type "Hello" into 'search box'
            Type "Hello" into 'search box'
            Type "Hello" into 'search box'

causes all branches to fail with

Type "Hello" into 'search box'
Error: ECONNREFUSED connect ECONNREFUSED 127.0.0.1:61199   [testfile.smash:13]
    at ClientRequest.<anonymous> (/usr/local/lib/node_modules/smashtest/node_modules/selenium-webdriver/http/index.js:258:15)
    at ClientRequest.emit (events.js:182:13)
    at ClientRequest.EventEmitter.emit (domain.js:442:20)
    at Socket.socketErrorListener (_http_client.js:391:9)
    at Socket.emit (events.js:182:13)
    at Socket.EventEmitter.emit (domain.js:442:20)
    at emitErrorNT (internal/streams/destroy.js:82:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:50:3)
    at process._tickCallback (internal/process/next_tick.js:63:19)

Errors occur intermittently and only with Chrome. Reproduced on MacOS.
No errors occur when only one branch does a Type.
No errors occur with other kinds of steps, such as Click.
Occurs less frequently when screenshots are off, or when not in headless mode.

how to use command line --debug

when I run

smashtest test.smash --screenshots=false --debug

I dont know how to find value hash.

Error: debug flag must be set to a hash at Object.exports.error (/usr/lib/node_modules/smashtest/src/utils.js:39:15) at processFlag (/usr/lib/node_modules/smashtest/src/cli.js:120:27) at /usr/lib/node_modules/smashtest/src/cli.js:384:17
can anyone give me sample code?

[Bug] Navigation to 'localhost' fails

Description:

Navigation to localhost fails with the following error message:

Navigate to "http://localhost:4200/"
Error: Cannot determine domain to navigate to. Either include a domain or have the browser already be at a page with a domain.   [C:\project-path\helloworld.smash:3]
    at BrowserInstance.nav (C:\long-path\smashtest\packages\js\browserinstance.js:274:27)
    at process._tickCallback (internal/process/next_tick.js:68:7)

Version: [email protected]

Example .smash file:

Open Chrome

    Navigate to "http://localhost:4200/"

Problem:

Your regular expression to parse the URL is broken:

const URL_REGEX = /^(https?:\/\/|file:\/\/)?([^\/]*\.[^\/]*(:[0-9]+)?)?(.*)/;

You're assuming the domain contains at least one . character, which is no requirement for domains.

Visualization of the regular expression

Step timeout

Over-arching default step timeout of 60 secs.

Also, built-in js function that allows a step implementation to override this timeout.

Consider making "next to" apply to only visible elements?

I ran into a situation which I think is not that rare, and I'm not sure what would be an ideal way to handle it. I have a DOM with a checkbox, which is hidden for CSS purposes, and some decorator markup for the presentation:

image

It looks like this:

image

If I want to click on the checkbox, I have 2 options:

  1. Target the checkbox by the visible part:
Click [.nj-checkbox__decorator, next to 'more than 30 years']

It works, but it forces me to add implementation detail to the test code, which I want to avoid. (And I think it goes against the spirit.)

  1. Target the real checkbox. I wnat to go this route. From an accessibility standpoint, the design system authors also want me to believe it's visible, and it's the real input. It reacts to the native .click() method, it is aria-annotated etc. But now the visibility issue comes up. I can use the any visibility prop, but the problem is that it doesn't distinguish between the input and the "next to" label:
Click '[type=checkbox], any visibility, next to "more than 30 years"'

will match too many elements, because the DOM has other occurrences of non-visible "more than 30 years" checkboxes (the popup library pre-renders all the context menus). any visibility applies to the "more than 30 years" elements too. The ideal option here would be to say: I need all checkboxes, visible and non-visible ones, but which are next to the visible "more than 30 years" elements.

I can think of a solutions here:

A) "next to" should handle its parameter as an EF, rather than a text, so we could write:

Click '[type=checkbox], any visibility, next to ["more than 30 years", visible]'

Unfortunately it seems we're hitting the limitations of the current syntax (or maybe not, but I often get confused by the ', " and [ combinations). But then it strikes to me that if it were an EF, "visible" would be automatically there. So if we don't want to extend the syntax to allow nested EFs, an alternative would be that....

B) "next to" should check the visibility of the parents, alongside their .innerText.

I'm not sure though that B) is better than A), it just might be easier to implement?

And a more generic feature which could mitigate this would be

C) parameterizable custom props.

Am I missing something? What do you think?

Code refactoring suggestion for Tree.js

Under tree.js in the branchify() module, lines 602-618

branchify(stepNode, branchAbove, level, isFunctionCall, isSequential) {
    // ***************************************
    // 1) Initialize vars
    // ***************************************

    if(typeof branchAbove == 'undefined') {
        branchAbove = new Branch;
    }

    if(typeof level == 'undefined') {
        level = 0;
    }

    if(!stepNode.isFunctionDeclaration) {
        this.latestBranchifiedStepNode = stepNode;
    }

    isSequential = (stepNode.isSequential && !(stepNode instanceof StepBlockNode)) || isSequential; // is this step node or any step node above it sequential? (does not include sequential step blocks)

    // Rest of code

I believe can be refactored to just

branchify(stepNode, branchAbove = new Branch, level = 0, isFunctionCall, isSequential = (stepNode.isSequential && !(stepNode instanceof StepBlockNode)) ) {
    // ***************************************
    // 1) Initialize vars
    // ***************************************

    if(!stepNode.isFunctionDeclaration) {
        this.latestBranchifiedStepNode = stepNode;
    } 
    // Rest of code

I've tried doing that and running all the tests, and it seems to work just fine for me. Also, is it fine to make tiny refactoring suggestions like this?

add chinese guide document

Hi
I try to translate it and write some sample(at sample folder) and write some tips , when I learn Smashtest.
I hope to help smashtest extend usage scenarios。

git

Show "JavaScript error" when running samshtest on the IE

After running below codes:
Open IE

Maximize window
    nav to "www.google.com"
        Wait until 'input[id=fakebox-input]' is visible (up to '10000' secs)

Show error:
Wait until 'input[id=fakebox-input]' is visible (up to '10000' secs)
JavascriptError: JavaScript error [F:\smashtestdemo\test\demo.smash:5]

Comment:
No such error for FireFox or safari.

Please push latest code, tags, changelog to Github

Hi authors, congrats on the 1.8.0 release. Please can you push the latest code and the tags up to Github. It can help us to see what the latest changes are, as we are encountering various issues and we're not sure what its relation with smashtest is.

A changelog would also be appreciated. Thanks!

How to override default timeout

Getting below error.

Error: Timeout of 60s exceeded [/home/radmin/Pictures/SmashTest/helloworld.smash:16]

Is there any capabilities to override default timeout?

[Question] Best way to organize tests

We have a lot of tests cases.

case1.smash
case2.smash
case3.smash
a common.smash with some helper functions.
and a setup.smash

In every case?.smash we don't want to open browser / login to our site.

What would be the best way to organize it? Is there an example showing this situation?

We have defined one function for each case?.smash file, but how can we each case selectively? Having a group for each case?

Thnx in advance for your help!

[Tools] VSCode extension or LSP

LSP should be the ideal solution, giving support for a lot of IDEs, but maybe too complex.

If not VSCode has a lot of momentum right now :)

Using groups multiple times in Smashtest results in groups being ignored, and many branches being run

I've noticed that using a group name multiple times in Smashtest branches results in many branches being run and the group getting ignored.

It's likely that I'm misunderstanding the purpose of groups, but I didn't see anything on the documentation page about its purpose, so I've assumed it's some kind of filtering mechanism.

Please help me understand why this would be happening.

I've got a sample, just pretend that this is a deep test.

Open Chrome

    Navigate to 'https://www.w3.org/' #first

        // Pretend there's a bunch of other steps here. 

        Click [a, 'Participate'] #first
        Click [a, 'Standards']  #second

Now try running it with first group.

smashtest --groups="first"

This runs both branches. I had expected this to run just the Click Participate step, not the Click Standards step.

[Docs] Better description and more examples / tutorials

Better description

Smashtest is a language for rapidly describing and deploying test cases.
Greatly speed up your automated testing by writing tests in a tree-like format.

Is it unit testing?
Only browser testing?
Can I make a test that navigates my site, creates a new product using Firefox and then check if the row has been inserted correctly in my database?

Examples / Tutorials

One great way to promote this tool is getting more examples / integration tutorials.
A CI/CD integration example could be great ( Jenkins, CircleCI, etc...)
A dev.to post could help spread the word :)

TypeError: Cannot assign to read only property '0' of string '[]' [undefined:1]

After I open chrome and nav to my local env, I can't find any element in the page and the screenshot looks fine.

I have tried to use chrome/firefox/safari, my page definitely contains a button.

Below is using REPL to select a button but in vain.

> 'button'

Start:     'button'
End:       'button'     failed (0.01 s)


'button'
TypeError: Cannot assign to read only property '0' of string '[]'   [undefined:1]
    at Function.parseObj (/usr/local/lib/node_modules/smashtest/packages/js/elementfinder.js:337:28)
    at doFind (/usr/local/lib/node_modules/smashtest/packages/js/elementfinder.js:867:48)
    at processTicksAndRejections (internal/process/task_queues.js:85:5)
    at async /usr/local/lib/node_modules/smashtest/packages/js/elementfinder.js:864:17


enter step to run it, enter or x = exit

How to combine `Verify` with element finder?

I tried to just do a simple test like "Does the current page contain the users name?":

What I tried:

Verify 'body' contains 'John'

This returns an error:

Error: The function `Verify 'body' contains 'John'` cannot be found.

But this works:

Verify 'body' is visible

I read the Verify steps, ElementFinders and Default ElementFinder props, but for me it's not clear how to actually combine these? Is the is visible example on the Verify steps page something different than the visible ElementFinder prop?

Thanks and best
Alex

Click on multi element/multi choice

I think that multi click on elements of a list can be nice, example:

let elems;
try{
    elems = await $$('{{Variable}}');
    if (elems){
        elems.forEach(elem => elem.click());
    }
}
catch (e) {
}

[Bug] Error: Cannot find module 'lodash/clonedeep'

Hello,
I'm on Debian buster and I tried to install smashtest:
npm i -g smashtest

$ npm i -g --no-cache smashtest
/home/user/npm/bin/smashtest -> /home/user/npm/lib/node_modules/smashtest/src/cli.js

> [email protected] install /home/user/npm/lib/node_modules/smashtest/node_modules/sharp
> (node install/libvips && node install/dll-copy && prebuild-install) || (node-gyp rebuild && node install/dll-copy)

info sharp Downloading https://github.com/lovell/sharp-libvips/releases/download/v8.7.4/libvips-8.7.4-linux-x64.tar.gz
prebuild-install WARN install No prebuilt binaries found (target=9.11.2 runtime=node arch=x64 libc= platform=linux)
make: Entering directory '/home/user/npm/lib/node_modules/smashtest/node_modules/sharp/build'
  TOUCH Release/obj.target/libvips-cpp.stamp
  CXX(target) Release/obj.target/sharp/src/common.o
  CXX(target) Release/obj.target/sharp/src/metadata.o
  CXX(target) Release/obj.target/sharp/src/stats.o
  CXX(target) Release/obj.target/sharp/src/operations.o
  CXX(target) Release/obj.target/sharp/src/pipeline.o
  CXX(target) Release/obj.target/sharp/src/sharp.o
  CXX(target) Release/obj.target/sharp/src/utilities.o
  SOLINK_MODULE(target) Release/obj.target/sharp.node
  COPY Release/sharp.node
make: Leaving directory '/home/user/npm/lib/node_modules/smashtest/node_modules/sharp/build'
+ [email protected]
added 187 packages in 44.815s

$ smashtest 
internal/modules/cjs/loader.js:550
    throw err;
    ^
Error: Cannot find module 'lodash/clonedeep'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:548:15)
    at Function.Module._load (internal/modules/cjs/loader.js:475:25)
    at Module.require (internal/modules/cjs/loader.js:598:17)
    at require (internal/modules/cjs/helpers.js:11:18)
    at Object.<anonymous> (/home/user/npm/lib/node_modules/smashtest/src/step.js:1:81)
    at Module._compile (internal/modules/cjs/loader.js:654:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:665:10)
    at Module.load (internal/modules/cjs/loader.js:566:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:506:12)
    at Function.Module._load (internal/modules/cjs/loader.js:498:3)

But I can't run it because of a lodash error

I tried without the -g too in one of my project

Error: Server terminated early with status 1

Hi There,

I wonder if someone can help me here.

My issue is, when i execute tests sequentially, only one branch get executed successfully, and failed the remaining branches without launching the browser and throw the below errors. Where there are multiple tests to execute, up to 2 branches are successfully executed then subsequent branches are failed without executing the scripts.

Please what can i do to resolve the issue?
Thank you

" Login SampleTest.smash:4 --> helloworld.smash:3
Open Chrome helloworld.smash:6 --> browser.smash:19

Open Chrome
Error: Server terminated early with status 1 [C:/Users/adeT/Test/helloworld.smash:6]

at C:\Users\adeT\AppData\Roaming\npm\node_modules\smashtest\node_modules\selenium-webdriver\remote\index.js:251:52
at processTicksAndRejections (internal/process/task_queues.js:93:5)

█████████████████████████ 100% | 00:00:37 | 1 passed | 1 failed | 2 branches complete

--repeat=N to repeat failing tests

--repeat=N repeats a failing test up to N times, to mitigate environmental instability and/or webdriver quirks.

Maybe also take screenshots for failing tests by default? (if --screenshots isn't set)

Right now, we advise users to run smashtest -s multiple times after a normal run. This will have the same effect, but will allow the user to only run one command.

set viewport can't work

When the safari is set to iphonex , the browser still use pc mode access, element is not visible in the viewport, they cannot be clicked.

error:
Error: Element not found in time

example:
`
open chrome
Open Safari

iPhone X 
    nav to 'www.google.com.hk/search?q=test'
        type 'test' into 'input[name=q]'
            click 'button[type=button]'

`

#ss takes screenshot on the step it's attached to

Hashtags:

  • #ss takes screenshot on the step it's attached to, after the step is done executing
  • #ss-both takes screenshot before and after its step

Flags:

  • When --screenshots=false, no screenshots are taken
  • When --screenshots=true, screenshots are taken before and after every step
  • When --screenshots=ss, or if --screenshots isn't passed in at all, only steps with #ss/#ss-both have screenshots taken

Step data:

  • This is all independent of --step-data, which describes what kind of data is safe to delete after a test (to prevent overuse of disk space)

[Question] Code block - count elements

First, can we execute code blocks inside REPL mode?

And now, how can I store in a variable the number of elements in a page?

Like:

Get rows in table {
g('myvar', (await $$('tr.myclass')).length)
}
Whenever I try to log() those vars or await $$('tr.myclass')).length, I get no output in the report.

Opera browser support

Opera browser support

  • Hi there! I really like SMASHTEST methodology of testing & my question is - "What about OPERA BROWSER support?"
    • Roadmap: Opera

CI - DevToolsPort doesn't exist

Hi,

I'm trying to integrate our smashtest tests suite into our Gitlab CI
I'm running a docker container in which I install google-chrome and chromedriver, but at the moment to Open Chrome, I got a crash complaining that DevToolsActivePort file doesn't exist
From my few researches, it seems that passing some args (--headless, --no-sandbox, --disable-dev-shm-usage) should work but did not find a way to pass these arguments to chrome by smashtest

Here are my logs


Open Chrome
WebDriverError: unknown error: Chrome failed to start: exited abnormally   [/app/src/tests/integrations/root/setup.smash:3]
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
  (Driver info: chromedriver=2.41.578700 (2f1ed5f9343c13f73144538f15c00b370eda6706),platform=Linux 4.15.0-55-generic x86_64)
    at Object.checkLegacyResponse (/app/node_modules/selenium-webdriver/lib/error.js:585:15)
    at parseHttpResponse (/app/node_modules/selenium-webdriver/lib/http.js:554:13)
    at Executor.execute (/app/node_modules/selenium-webdriver/lib/http.js:489:26)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)

00:00:04 | 17 failed | 17 skipped | 34 branches complete```

Improve speed of generating branches

Performance tends to become noticeable around 200+ branches (or 2000+ steps)

After researching, seems like the bottleneck is in how js handles very large objects in memory (allocation, adding keys, changing values). There are also lots of nested for loops that can probably be optimized.

The code that generates md5 hashes for each branch is NOT the culprit (it runs rather quickly).

Logical AND for --groups

Multiple groups passed in via --groups="A,B,C" are currently ORed together, with branches from any one group selected to run.

Allow a logical AND, where only branches that belong to all groups listed are selected to run.

Perhaps the syntax should be --groups="A+B+C", where + and , can be combined and + takes priority (e.g., "A+B,C+D" runs branches part of A and B, or C and D)

Allow Tabs?

In the Docs it states. Exactly 4 spaces for each indent (no tabs). I am curious why it does not allow Tab Characters and then just convert them to 4 characters internally during the parsing process?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.