pghalliday / grunt-browserstack

MIT License
62 stars 3 forks source link

Submitting local files, possible? #5

Open robksawyer opened 11 years ago

robksawyer commented 11 years ago

Is it possible to test local files? Does this require that you run a server locally and point to the files?

pghalliday commented 11 years ago

Yes that's the purpose of the tunnel options. And yes it is necessary to run a server locally, if you're testing JS libraries for use in the browser then you may want to look at Karma

robksawyer commented 11 years ago

I'm totally new to Browserstack, so, once the workers start, how exactly should I test? Do I need to navigate to the web version of the Browserstack site? I'd like to point Grunt-Browserstack to some local files, run a command, get screenshots of what the files look like in browsers specified and have them show up in a folder locally. Possible? Thanks for the guidance, the plugin and your time.

pghalliday commented 11 years ago

Well the screen shots stuff is not implemented in this plugin yet, but I'm looking into implementing it now.

However I'm not sure it will cover your use case. For instance i'm not sure what you mean by run a command?

The way BrowserStack screenshots work as i understand it is that you submit a URL to point to (which can be local if you use the tunnel) and it puts it in a queue. At some point BrowserStack will load the URL and then send back links to images to download.

I don't see anyway of sending commands between loading the URL and taking a screenshot using their API.

This is what the parameters for the screenshot request look like:

{
  "url":"www.google.com",
  "callback_url": "http://staging.example.com",
  "win_res": "1024x768",
  "mac_res": "1920x1080",
  "quality": "compressed",
  "wait_time": 5,
  "orientation": "portrait",
  "browsers":[{
    "os":"Windows",
    "os_version":"XP",
    "browser":"ie",
    "browser_version":"7.0"
   },
   {
    "os":"ios",
    "os_version":"6.0",
    "device":"iPhone 4S (6.0)"
    },
    ....
  ],
}

So I would think you would need to start your server and put it in a state such that when BrowserStack requests the URL you specify, it renders what you want to check.

This could be an issue if there is session data or a login is required, but could also be worked around with some trickery or by separating the layout checking from the overall flow of the application.

robksawyer commented 11 years ago

By command I meant something like 'grunt browserstack_screenshots'. The params would be in the Gruntfile.js. Thanks for the response, I'll look into the API to see if I can help get this setup.

Note: At the moment, there aren't any session or login states – good point, though. It's basically just a bunch of HTML files that need testing.

pghalliday commented 11 years ago

Ah i see. Well I imagine an interface that either allows you to specify a list of URLs to screen shot or potentially a list of local files that can then be served by starting a server and constructing the URLs internally in the task

pghalliday commented 11 years ago

Actually specifying a list of local files will soon get complicated with even simple pages as they will likely include images and css by relative URLs. But if all the content is in one directory, it could be potentially specified like this.

local: {
  dir: 'static',
  files: '**/*.html'
}

This could tell the task to start a webserver and serve static content from a directory called static in the current directory. Then compose a list of URLs to all the .html files in that directory and its subdirectories and submit those URLs to browserstack for screenshots