Giter Site home page Giter Site logo

34's Introduction

34.js

Yet another Selenium WebDriver library for Node...

(Warning: This is a design doc... There's no code, yet! But when it lands, it'll most likely be based on webdriver-http-sync.

Goals:

  • JavaScripty - This should feel like a JavaScript API, not a port from Java
  • For automating web browsers: desktop and mobile
  • Synchronous API - Async makes no sense for shell scripts or user interface test automation.
  • Try to reduce locator strategy proliferation. Use CSS selectors as much as possible.
  • Optimize for interactive exploration at the console.
  • Yeah:
    • Pithy property names FTW
    • Easy discovery of properties via tab completion in the console.
    • e.g. thing.frobulated
  • Boo:
    • e.g. driver.window().getFrobulationStatusOfThing(By.whyAmIStillTyping())

Non-Goals:

  • Automating non-web native apps. (Although I hope this is temporary!)

Install

npm install 34

Example Usage

Driver = require('34').Driver
se = new Driver()

API

// Navigation
// ----------

// Open a URL
se.url = 'http://google.com'
se.open = function(url) { return this.url = url }
se.go = se.open

se.back()
se.forward()
se.refresh()

// Close current window
se.close()

// End current session
se.quit()


// Frame Navigation

// Switch focus to frame
se('#IdOfSomeFrame').focus()

// Switch focus to parent frame
se.parent()


// Window Navigation

// Switch focus to window
se.window = 'windowHandleId'



// Interrogation
// -------------

// Driver
se.url
se.title
se.source

// Server status
se.status

// Id of current session
se.session

// List of all sesions
se.sessions

// Handle id of current window
se.window

// List of all window handle ids
se.windows

// Id of active (focused) element
se.activeElement

// Find Element
e = se('#id')
// Find All elements
es = se('*[#id]')

// By name:
se('[name="theName"]')

// By id:
se('#theId')

// By tag name:
// all links
se('a')

// Element
e.attribute('name')
e.css('propname')
e.displayed
e.enabled
e.location
e.locationInView
e.name
e.selected
e.size
e.tag
e.text

// Find child element
e.find('#id')

// Find all child elements
e.find('#id')

// Alerts
se.alert.text


// Manipulation
// ------------

// Driver

// Keyboard
se.keys()
se.keyDown()
se.keyUp()

// Mouse
se.mouse.click()
se.mouse.doubleClick()
se.mouse.down()
se.mouse.moveBy(20,100)
se.mouse.moveTo(0,0)
se.mouse.up()

// Slim Jim (https://www.youtube.com/watch?v=KbneMYYI78Q)
se.touch.down()
se.touch.move()
se.touch.tap()
se.touch.up()

// Execute JavaScript
se.execute()
se.executeAsync()

// Wait for expression to return true or time out (milliseconds)
se.waitFor('return true', 10000)

// Take a Screenshot
se.screenshot()

// Element
e.clear()
e.click()
e.focus()    
e.keys()
e.submit()
e.scrollIntoView()

// Alerts
se.alert.accept()
se.alert.dismiss()
se.alert.focus()
se.alert.keys()



// Feng Shui
// ---------

// Get size of current window
se.size

// Set size of current window
se.size = [200, 200]

// Get position of current window
se.position

// Get position of current window
se.position = [200,200]

// Maximize size of current window
se.maximize()

// (For mobile...)
se.orientation
se.orientation = LANDSCAPE
se.orientation = PORTRAIT



// Synchronisation
// ---------------
se.timeouts.implicitWait = 10000
se.timeouts.pageLoad = 10000
se.timeouts.asyncScript = 10000

34's People

Contributors

hugs avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

34's Issues

Synchronous API

Synchronous API - Async makes no sense for shell scripts or user interface test automation.

Do you mean Synchronous-looking API?

Sometimes elements aren't available right away, like a single page app that requires some data before UI elements animate in.

Protractor has wrapped webdriver to provide this and we've found it to be helpful. Example.

Looking forward to what you are cooking up.

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.