Giter VIP home page Giter VIP logo

daydream's Introduction

Daydream

Note

Segment has paused maintenance on this project, but may return it to an active status in the future. Issues and pull requests from external contributors are not being considered, although internal contributions may appear from time to time. The project remains available under its open source license for anyone to use.

A chrome extension to record your actions into a Nightmare or Puppeteer script.

Example

Demo

Installing

Google Chrome

You can download Daydream from the Chrome Web Store here.

Opera

First enable Opera to install Chrome extensions here; then you can download Daydream from the Chrome Web Store here.

Developing

  1. Run $ git clone https://github.com/segmentio/daydream.git && cd daydream && make
  2. Navigate to chrome://extensions
  3. Ensure that 'Developer mode' is checked
  4. Click Load unpacked extension...
  5. Browse to daydream/build and click Select

Usage

Just click the black daydream icon (it should turn green to indicate that it is actively recording), run all the tasks you wish to automate, and then click the green icon and open the popup.

Notes

Daydream currently supports .goto(), .click(), .type(), .screenshot(), and .refresh().

If you want daydream to capture typing, press tab after you finish typing in each input element.

License

MIT

daydream's People

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  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

daydream's Issues

Doesn't record at all :/

I'm clicking the record button, doing things, but all it reports is the basic template.

Let me know what information you need.

redesign popup/add new features

Idea:

  1. Home page: start/stop/replay a recording, view a list of previous recordings, delete a recording, export a recording's nightmare script.
  2. Recording page: view the steps in the chosen recording in human-readable form (e.g. "Visited http://google.com", "Clicked on the Search button"), delete and reorder steps in the recording.
  3. Settings page: type in an optional custom function defining how to generate the query for identifying an element (what cssPath is currently doing).

Does not track events anymore

Neither Nightmare nor Puppeteer tabs work anymore. I assume something is wrong with catching events? Anyone else is also experiencing?

Daydream generates extreme selectors

Is there a way to shorten the selectors generated by Daydream? Or a way to let Daydream know when to generate relative selector paths? Here is a snippet of a generated click:

.click(
            'html..js.flexbox.flexboxlegacy.canvas.canvastext.webgl.no-touch.geolocation.postmessage.websqldatabase.indexeddb.hashchange.history.draganddrop.websockets.rgba.hsla.multiplebgs.backgroundsize.borderimage.borderradius.boxshadow.textshadow.opacity.cssanimations.csscolumns.cssgradients.cssreflections.csstransforms.csstransforms3d.csstransitions.fontface.generatedcontent.video.audio.localstorage.sessionstorage.webworkers.applicationcache.svg.inlinesvg.smil.svgclippaths body div.header-nav div.container div.top-main-nav.navbar.navbar-inverse div.navbar-inner.container div.nav-collapse.collapse ul#megamenu.nav li#toys.dropdown.main-nav-item.mmenu-item.activated a.main-nav-item'
        )

This was generated by clicking the "issues" link in this github repositoty:

click('html..is-copy-enabled.is-u2f-enabled body.logged_in.env-production.macintosh.vis-public div.main-content div div#js-repo-pjax-container.context-loader-container.js-repo-nav-next div.pagehead.repohead.instapaper_ignore.readability-menu.experiment-repo-nav div.container nav.reponav.js-repo-nav.js-sidenav-container-pjax.js-octicon-loaders a.js-selected-navigation-item.reponav-item')

This is huge und unnecessary. Any ideas? Thanks

Background page access errors

Not able to generate any recordings. Took a look at the background page console and saw a bunch of errors.

screen shot 2018-04-23 at 1 23 26 pm

  • Unrecognized Content-Security-Policy directive 'https://*.segment.com'.

  • Unchecked runtime.lastError while running tabs.executeScript: Cannot access contents of url "chrome-devtools://devtools/bundled/inspector.html?remoteBase=https://chrome-devtools-frontend.appspot.com/serve_file/@dc3469be277cc962ba01d9c0cb5bb1a265676c36/&dockSide=undocked". Extension manifest must request permission to access this host.

  • Unchecked runtime.lastError while running tabs.executeScript: Cannot access a chrome-extension:// URL of different extension at Recorder.handleCompletedNavigation (eval at 248 (chrome-extension://oajnmbophdhdobfpalhkfgahchpcoali/background.js:761:1), <anonymous>:46:21)

  • Unchecked runtime.lastError while running tabs.executeScript: Cannot access a chrome:// URL at Recorder.handleCompletedNavigation (eval at 248 (chrome-extension://oajnmbophdhdobfpalhkfgahchpcoali/background.js:761:1), <anonymous>:46:21)


OSX Chrome Version 65.0.3325.181 (Official Build) (64-bit)

Cannot record login at cibc.com

Attempting to automate login:

After entering a card number and pressing tab, the tab freezes and eventually says "Woops.. something went wrong".

Entering a card number and pressing tab works as expected when not recording actions via daydream.

error : TypeError: Path must be a string. Received undefined

Ran into the following issue when running make

Can you help out?

Cloning into 'daydream'...
remote: Counting objects: 663, done.
remote: Total 663 (delta 0), reused 0 (delta 0), pack-reused 663
Receiving objects: 100% (663/663), 3.74 MiB | 806.00 KiB/s, done.
Resolving deltas: 100% (336/336), done.
Checking connectivity... done.
npm WARN deprecated [email protected]: Jade has been renamed to pug, please install the latest version of pug instead of jade
npm WARN deprecated [email protected]: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated [email protected]: graceful-fs v3.0.0 and before will fail on node releases >= v7.0. Please update to graceful-fs@^4.0.0 as soon as possible. Use 'npm ls graceful-fs' to find it in the tree.
npm WARN deprecated [email protected]: use uuid module instead
npm WARN deprecated [email protected]: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated [email protected]: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
[email protected] /Users/mtaylor/dev/labs/daydream
└─┬ [email protected]
  ├── [email protected]
  ├─┬ [email protected]
  │ └── [email protected]
  ├── [email protected]
  ├── [email protected]
  ├── [email protected]
  ├── [email protected]
  ├─┬ [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ └── [email protected]
  ├─┬ [email protected]
  │ └── [email protected]
  ├─┬ [email protected]
  │ └── [email protected]
  ├─┬ [email protected]
  │ └── [email protected]
  ├── [email protected]
  ├─┬ [email protected]
  │ └── [email protected]
  ├── [email protected]
  ├── [email protected]
  ├─┬ [email protected]
  │ └─┬ [email protected]
  │   ├── [email protected]
  │   ├─┬ [email protected]
  │   │ └── [email protected]
  │   ├── [email protected]
  │   ├── [email protected]
  │   ├─┬ [email protected]
  │   │ ├── [email protected]
  │   │ └── [email protected]
  │   ├── [email protected]
  │   ├─┬ [email protected]
  │   │ ├── [email protected]
  │   │ └── [email protected]
  │   └── [email protected]
  ├─┬ [email protected]
  │ └─┬ [email protected]
  │   ├── [email protected]
  │   ├─┬ [email protected]
  │   │ └── [email protected]
  │   └─┬ [email protected]
  │     └── [email protected]
  ├─┬ [email protected]
  │ ├─┬ [email protected]
  │ │ ├── [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └─┬ [email protected]
  │ │   └── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ └── [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ └── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ ├─┬ [email protected]
  │ │ │ │ ├── [email protected]
  │ │ │ │ ├─┬ [email protected]
  │ │ │ │ │ └── [email protected]
  │ │ │ │ ├── [email protected]
  │ │ │ │ └── [email protected]
  │ │ │ ├─┬ [email protected]
  │ │ │ │ ├── [email protected]
  │ │ │ │ ├─┬ [email protected]
  │ │ │ │ │ └── [email protected]
  │ │ │ │ └── [email protected]
  │ │ │ └─┬ [email protected]
  │ │ │   └── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ ├── [email protected]
  │ │ │ ├── [email protected]
  │ │ │ ├── [email protected]
  │ │ │ └── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ ├── [email protected]
  │ │ │ ├─┬ [email protected]
  │ │ │ │ ├── [email protected]
  │ │ │ │ ├── [email protected]
  │ │ │ │ └── [email protected]
  │ │ │ └─┬ [email protected]
  │ │ │   ├── [email protected]
  │ │ │   ├── [email protected]
  │ │ │   ├── [email protected]
  │ │ │   ├─┬ [email protected]
  │ │ │   │ └── [email protected]
  │ │ │   ├── [email protected]
  │ │ │   ├─┬ [email protected]
  │ │ │   │ └── [email protected]
  │ │ │   ├── [email protected]
  │ │ │   ├── [email protected]
  │ │ │   └── [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ └── [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ └── [email protected]
  │ │ ├── [email protected]
  │ │ └── [email protected]
  │ ├── [email protected]
  │ ├─┬ [email protected]
  │ │ ├── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ ├─┬ [email protected]
  │ │ │ │ └─┬ [email protected]
  │ │ │ │   └── [email protected]
  │ │ │ └── [email protected]
  │ │ └─┬ [email protected]
  │ │   ├─┬ [email protected]
  │ │   │ └── [email protected]
  │ │   ├─┬ [email protected]
  │ │   │ ├── [email protected]
  │ │   │ ├── [email protected]
  │ │   │ └── [email protected]
  │ │   └── [email protected]
  │ └── [email protected]
  ├── [email protected]
  ├─┬ [email protected]
  │ └── [email protected]
  ├─┬ [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├── [email protected]
  │ ├─┬ [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ ├── [email protected]
  │ │ │ └── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ └── [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ └── [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ └── [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ ├── [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └─┬ [email protected]
  │ │   ├─┬ [email protected]
  │ │   │ ├── [email protected]
  │ │   │ ├── [email protected]
  │ │   │ └─┬ [email protected]
  │ │   │   └── [email protected]
  │ │   └─┬ [email protected]
  │ │     ├─┬ [email protected]
  │ │     │ ├── [email protected]
  │ │     │ └── [email protected]
  │ │     └── [email protected]
  │ ├─┬ [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ └── [email protected]
  │ │ ├── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ └── [email protected]
  │ │ └─┬ [email protected]
  │ │   ├── [email protected]
  │ │   ├─┬ [email protected]
  │ │   │ ├─┬ [email protected]
  │ │   │ │ ├── [email protected]
  │ │   │ │ └─┬ [email protected]
  │ │   │ │   └── [email protected]
  │ │   │ └── [email protected]
  │ │   ├── [email protected]
  │ │   ├─┬ [email protected]
  │ │   │ └─┬ [email protected]
  │ │   │   └── [email protected]
  │ │   ├── [email protected]
  │ │   └── [email protected]
  │ ├── [email protected]
  │ ├─┬ [email protected]  (git://github.com/component/queue.git#23dbce0f19a714b020b4fc52ed07ac0365c9b449)
  │ │ ├── [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └─┬ [email protected]
  │ │   └── [email protected]
  │ ├─┬ [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ ├── [email protected]
  │ │ │ ├── [email protected]
  │ │ │ ├─┬ [email protected]
  │ │ │ │ ├─┬ [email protected]
  │ │ │ │ │ └── [email protected]
  │ │ │ │ ├─┬ [email protected]
  │ │ │ │ │ └─┬ [email protected]
  │ │ │ │ │   ├── [email protected]
  │ │ │ │ │   └── [email protected]
  │ │ │ │ └── [email protected]
  │ │ │ ├─┬ [email protected]
  │ │ │ │ └── [email protected]
  │ │ │ ├── [email protected]
  │ │ │ ├── [email protected]
  │ │ │ ├── [email protected]
  │ │ │ └─┬ [email protected]
  │ │ │   ├─┬ [email protected]
  │ │ │   │ ├─┬ [email protected]
  │ │ │   │ │ └── [email protected]
  │ │ │   │ ├── [email protected]
  │ │ │   │ └── [email protected]
  │ │ │   ├── [email protected]
  │ │ │   └── [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ ├── [email protected]
  │ │ │ ├── [email protected]
  │ │ │ ├─┬ [email protected]
  │ │ │ │ └── [email protected]
  │ │ │ ├─┬ [email protected]
  │ │ │ │ └── [email protected]
  │ │ │ ├── [email protected]
  │ │ │ ├── [email protected]
  │ │ │ ├─┬ [email protected]
  │ │ │ │ ├── [email protected]
  │ │ │ │ ├── [email protected]
  │ │ │ │ └── [email protected]
  │ │ │ ├─┬ [email protected]
  │ │ │ │ └── [email protected]
  │ │ │ ├── [email protected]
  │ │ │ ├── [email protected]
  │ │ │ └── [email protected]
  │ │ ├── [email protected]
  │ │ └── [email protected]
  │ ├── [email protected]
  │ └─┬ [email protected]
  │   └── [email protected]
  ├─┬ [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ ├── [email protected]
  │ │ └── [email protected]
  │ └─┬ [email protected]
  │   ├── [email protected]
  │   ├─┬ [email protected]
  │   │ └─┬ [email protected]
  │   │   └── [email protected]
  │   └── [email protected]
  ├── [email protected]
  ├─┬ [email protected]
  │ ├─┬ [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ ├── [email protected]
  │ │ │ ├── [email protected]
  │ │ │ └── [email protected]
  │ │ └── [email protected]
  │ ├── [email protected]
  │ └── [email protected]
  ├── [email protected]
  ├─┬ [email protected]
  │ └─┬ [email protected]
  │   ├── [email protected]
  │   ├─┬ [email protected]
  │   │ ├─┬ [email protected]
  │   │ │ └── [email protected]
  │   │ ├── [email protected]
  │   │ ├── [email protected]
  │   │ ├── [email protected]  (git://github.com/ariya/esprima.git#a65a3eb93b9a5dce9a1184ca2d1bd0b184c6b8fd)
  │   │ ├── [email protected]
  │   │ ├── [email protected]
  │   │ ├── [email protected]
  │   │ ├── [email protected]
  │   │ ├── [email protected]
  │   │ └── [email protected]
  │   ├── [email protected]
  │   ├── [email protected]
  │   ├─┬ [email protected]
  │   │ └── [email protected]
  │   ├─┬ [email protected]
  │   │ ├── [email protected]
  │   │ └── [email protected]
  │   └── [email protected]
  ├── [email protected]
  ├─┬ [email protected]
  │ └─┬ [email protected]
  │   ├─┬ [email protected]
  │   │ ├── [email protected]
  │   │ ├── [email protected]
  │   │ └── [email protected]
  │   └── [email protected]
  ├─┬ [email protected]
  │ └─┬ [email protected]
  │   └── [email protected]
  ├─┬ [email protected]
  │ └── [email protected]
  ├── [email protected]
  ├── [email protected]
  ├── [email protected]
  ├── [email protected]
  └── [email protected]

npm WARN [email protected] No license field.

     building : lib/foreground/popup/index.js
    installed : [email protected]
    installed : [email protected]
    installed : [email protected]
        error : TypeError: Path must be a string. Received undefined
    at assertPath (path.js:7:11)
    at extname (path.js:1433:5)
    at extension (/Users/mtaylor/dev/labs/daydream/node_modules/duo-main/index.js:135:10)
    at dependency (/Users/mtaylor/dev/labs/daydream/node_modules/duo-main/index.js:83:16)
    at coerce (/Users/mtaylor/dev/labs/daydream/node_modules/duo-main/index.js:31:7)
    at Duo.resolve (/Users/mtaylor/dev/labs/daydream/node_modules/duo/lib/duo.js:716:22)
    at next (native)
    at next (/Users/mtaylor/dev/labs/daydream/node_modules/co/index.js:74:21)
    at Duo.<anonymous> (/Users/mtaylor/dev/labs/daydream/node_modules/co/index.js:45:5)
    at Duo.next (/Users/mtaylor/dev/labs/daydream/node_modules/co/index.js:90:21)

make: *** [build] Error 1

➜  daydream git:(master) make
make: Nothing to be done for `default'.```

Recording different pages

Is there a way to record a path that spans multiple pages? The idea is that I have a site that is not a single page app, and I click on links that will refresh the page.

Text input broken

Daydream isn't capturing text input for me, only clicks. Running Chrome Version 50.0.2661.102 (64-bit) on Mac OS X 10.11, Daydream Version: 2.1.1.

Steps to reproduce:
Go to Github.com
Click Daydream Icon
Click Search box
Type in any text.
Press Enter
Click Daydream Icon again.

Result:

var Nightmare = require('nightmare');
  yield Nightmare()
    .click('html..is-copy-enabled.emoji-size-boost.is-u2f-enabled body.logged-in.env-production.macintosh.page-dashboard div.header.header-logged-in.true div.container.clearfix div.header-search.js-site-search form.js-site-search-form label.form-control.header-search-wrapper.js-chromeless-input-container.focus input.form-control.header-search-input.js-site-search-focus.')

There's no input to be found. Similar results can be achieved through any normal input box as well.

Unable to record more than one action each time

Hi!
Really love the idea of the Daydream Chrome extension!
However each time I try to use it, following the instructions in https://github.com/segmentio/daydream#usage only one single action/step gets recorded ...

When I click on the black daydream icon it turns green, but as soon as I perform any action on the page e.g. click a link the daydream icon turns black again and stops recording. 😢

I'm running Chrome Version 56.0.2924.87 (64-bit) for Mac OS Sierra 10.12.3 (16D32)
(both OS and Chrome are the latest versions)

I must be doing something wrong but I cannot figure out what! I've tried deleting the plugin and re-installing it from the Chrome Store but not had luck so far.
Any help diagnosing this would be much appreciated!

Confusing documentation

There's a bit on analytics-node in the README, which I think is leftover from a scaffolder or something. A quick run-through about how to use it couldn't hurt either.

Cool extension otherwise though!

custom query

Give the user the option to add their own custom query function (in place of what csspath is doing)

Error make.

 building : lib/foreground/popup/index.js

/Volumes/Data/chrome/daydream/node_modules/duo/node_modules/step.js/index.js:87
co(fn).apply(ctx, args.concat(next));
^
TypeError: Object # has no method 'apply'
at call (/Volumes/Data/chrome/daydream/node_modules/duo/node_modules/step.js/index.js:87:14)
at null._onTimeout (/Volumes/Data/chrome/daydream/node_modules/duo/node_modules/step.js/index.js:68:5)
at Timer.listOnTimeout as ontimeout
make: *** [build] Error 8

add analytics :)

would be sweet to get a.js working in here so that we have a canonical example to point our customers to!

not capturing typing on input or clicks on search buttons

Able to replicate this issue on both:
System: Ubuntu 16.04, Chrome Version 65.0.3325.146 (Official Build) (64-bit)
System: Windows 10, Version 64.0.3282.186 (Official Build) (64-bit)

Example 1: Google. Navigate to google, click on input, add text, search. Daydream is only returning

const Nightmare = require('nightmare')
const nightmare = Nightmare({ show: true })

nightmare
.goto('https://www.google.com/')
.end()
.then(function (result) {
  console.log(result)
})
.catch(function (error) {
  console.error('Error:', error);
});

and

const puppeteer = require('puppeteer')

(async () => {
  const browser = await puppeteer.launch()
  const page = await browser.newPage()
  await page.goto('https://www.google.com/')
  await browser.close()
})()

Example 2: Github. Navigate to github daydream repository, click on search input for this repository, add text, search. Daydream is only returning:

const Nightmare = require('nightmare')
const nightmare = Nightmare({ show: true })

nightmare
.goto('https://github.com/segmentio/daydream')
.end()
.then(function (result) {
  console.log(result)
})
.catch(function (error) {
  console.error('Error:', error);
});

and

const puppeteer = require('puppeteer')

(async () => {
  const browser = await puppeteer.launch()
  const page = await browser.newPage()
  await page.goto('https://github.com/segmentio/daydream')
  await browser.close()
})()

Tried the same on Wikipedia and Wiktionary with the same results.

output code

Hi there,

Your extension is awesome, something i was looking for. I was playing with https://github.com/ebrehault/resurrectio which is for Casperjs.

Anyway, check the screenshot below how styled code i got. Tell me is this normal, or should be nice like on ur screenshot.

screenshot

Record form typing + submission with enter key

Example:

  • Enable recording
  • On this github repository page, click on the "Search" field on the top of the page
  • Type "cool project"

In order to record "cool project", you have to press "Tab" key.
=> OK
Now, how can we submit the form ? There is no "Submit" button on the page and daydream doesn't record neither the "Enter" key pressed nor the submitted text if "tab" key is not pressed.

Thank you

Used to work great but not anymore

when i try to click buttons on a page, it doesn capture it..

Please help me I really need it to work

image

image

const Nightmare = require('nightmare')
const nightmare = Nightmare({ show: true })

nightmare

.end()
.then(function (result) {
console.log(result)
})
.catch(function (error) {
console.error('Error:', error);
});
restart

the extension is broken on the browser

I can't use the chrome extension link, so i download the code and make. At last installed the extension on the chrome browser. but the extension is still broken with errors

Uploading Screen Shot 2020-06-15 at 09.42.13.png…
Screen Shot 2020-06-15 at 09 42 21

replay

After #10 is finished, add feature to replay recordings

Input text not being captured when there's another input next

The documentation says that in order to capture text from an input, you have to press the Tab key.
It works fine when the page only has one input.

But for example, on a login form when you press Tab key, the focus jumps to the next input and the text doesn't get captured in Daydream.
The last input's text gets captured as expected.

Supporting navigation to new tab

Hi guys.
Does this extension support navigation to a new browser tab? As I tested, It seems when user clicks on a link to open it on a new tab, recording is stopped there. Is there any workaround for that?

Support for additional input types.

This appears to only support standard "input" elements. Would it not be possible to bind to the value changed event for inputs to handle support for things like checkboxes or input buttons? I'm using this to test asp webforms and the default button is an and this isn't picking up their clicks. This could support the following list of types fairly easily. https://www.w3schools.com/tags/att_input_type.asp

How to use your extension?

How to use your extension? I just need to record a few consecutive mouse clicks and make them repeat at the right time.

Content script execution problem?

Hi!

I tried the extension and I am curious about the behaviour of the content script. I tried to run the extension on a react app, and I noticed that it could not record me typing stuff into the input box.

I've added a few console.log statements to see what's happening, and this part:

    const inputs = document.querySelectorAll('input, textarea')
    console.log('inputs', inputs)

returns 0. Basically, it means that it tries to bind the listeners before the react app has actually booted, hence no inputs exist on the page.

Is there a reason why the extension works this way? Wouldn't it be better for the content script to bind listeners only once the badge has been clicked? At least the user would be aware whether or not DOM has completely loaded.

Single quotes in typed text are not escaped

Type I'm feeling lucky into an input field, and the generated output is not escaped

Actual
.type('input', 'I'm feeling lucky')

Expected
.type('input', 'I'm feeling lucky')

Record mousemove and scrolling events?

I'd like to be able to record an entire user session, similar to how a tool like Hotjar or Mouseflow does session recording / replays, and be able to replay that session through nightmare to perfectly simulate a real user session.

Any plans on implementing this? If not, anyone aware of any other libraries that can help me accomplish this?

Thanks!

Analytics.js

I see that analytics.js is mentioned in the readme, and also listed as dependency in package.json, but I can't find it's use anywhere in the codebase. How is it being used?

I want to add tracking to a chrome extension so I'm trying to find examples for it. Isn't exposing our write a security issue?

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.