npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

selenium-protractor

v2.0.0

Published

Selenium test case converter to protractor source code

Downloads

11

Readme

Selenium protractor

Selenium test case converter to protractor source code that can be required in any e2e test. Initially this was developed at Nordea to speed up creation of e2e tests.

Structure

There are two commands to make better structure in the file:

  • desc - creates describe block, value is used as description - locator is not needed
  • it - created it block, value is used as description - locator is not needed

Neigher of them supports nesting though, but if it is needed - enddesc,endit (or similar) would have to be introduced. Each it block will close all previous blocks (except desc) that are created by various commands and each desc will close previous desc command (no nesting).

Alternatively, comments can be added instead of custom commands: Comment will be treated as desc command (only if next command in the list is a another comment or it command), otherwise as an it command.

if comment or it value start with ide:, all commands in that block will be ignored when parsing the html file. See login.html why this is useful. if comment or it value starts with skip:, test case will be marked as skipped if comment or it values starts with @if(<some-condition>):, generated it or describe block will only run if that condition is met. Only useful in combination with export command

Flow

In some cases you need to skip or run certain commands depending on what the user sees

  • breakIf - if condition specified in value is true, further commands in current it block will be skipped
  • continueIf - if condition specified in value is true, further command in current it block will be executed, otherwises skipped

Condition is everything you would write in an if condition, e.g. myCount>0 or !modalVisible

Sometimes you want to have a single test case file, but would like to run another tests in between commands.

  • callback - execute a function and run additional tests, e.g. data.myFn or data.myFn('param1'). Note that this command must be last command in an it block due to the nature of how tests are executed.

Locator

Selenium ide with custom extensions should do pretty well. Additionally you can also use stored variables for assertions for element itself or element child! Some examples

  • css=p
  • e2etag=my-e2e-tag
  • ${list}>>css=p will select p tags under previously located element
  • e2etag=my-e2e-tag--${_date} (_date must be stored first)

Interaction

  • click
  • type - enter text to an input field
  • focus - scroll element into view
  • submit
  • scrollTo - scroll to given position e.g. 0,500 (500px from top). If no locator is set, document scroll will be adjusted
  • scrollBy - scroll by given offset e.g. 0,250 (250px from current top). If no locator is set, document scroll will be adjusted
  • eval - evaluate value as javascript, if locator is specified DOM node can be accessed via element variable
  • storeEval - evaluate value as javascript and store it for later
  • do we need all the events? e.g. keyDown, mousedown?

Assertions

Actual testing can be done via following commands:

  • assert* - will get appropriate value from the element and compare it to a given expression and will expect it to match
  • assertNot * - will get appropriate value from the element and compare it to a given expression and will not expect it to match
  • store* - will store the value in a variable for later use
  • store - will store reference to an element in a variable, which could later be used as a selector or value
  • verify* - not implemented, do we need them? The difference between assert and verify is that if the latter fails, test should not continue
  • [assert|store]ElementPresent
  • [assert|store]ElementEnabled
  • [assert|store]ElementSelected
  • [assert|store]ElementCount
  • [assert|store]scrollLeft
  • [assert|store]scrollTop

The value can be checked in a few ways:

  • text - will check if values are equal
  • !text - will check if values are not equal (prefixing will always negate any comparison) - doesn't work in ide
  • <2 - will check if value is less than 2, (input must be a number, e.g. assertCssCount) - doesn't work in ide
  • 2 - will check if value is greater than 2 (input must be a number, e.g. assertCssCount) - doesn't work in ide

  • ${myVariable} - will compare value to the variable. !<> modifiers will work as well.
  • regexp:/foo/ - will use toMatch method to compare with given expression
  • regexpi:/foo/ - will use toMatch method to compare with given expression. It will also add i (case insensitive) flag
  • regexp:.*${name+'-test'} - will result in /.*foo\-test/ if name variable=foo and use toMatch method to compare
  • regexpi:.*${name+'-test'} - will result in /.*foo\-test/i if name variable=foo and use toMatch method to compare
  • glob:test or just test - not implemented, but is default for selenium ide

Usage

Command line:

node index.js <glob> <destination> <path-to-suite>

node index.js in/**/*html out in/_selenium.suite

Code:

var transform = require('./test/e2e/selenium-protractor/index');
var suite = 'e2e/_source/_selenium.suite';
var glob = 'e2e/_source/**/*.html';
var destination = 'e2e/_generated';
var delta = false; // if you have a watcher, you can pass partial glob/path and this flag as true to only add what is missing in the test suite
transform(glob, destinationDir, suite, delta, (err) => {}); // for more advanced usage see index.js