3

I'm automating access to a web site to collect data from it. Unfortunately that page detects the screen size and doesn't give me the desired page if the screen is too small. When running the script from a non-interactive context (IIS web application) the Screen object seems to return a size of 1024x768 pixels. Even though I set the viewport size to 1300x1000 pixels which affects screenshots but not the web page's JavaScript.

How can I tell PhantomJS or CasperJS (I'm using the latter but that's using the former) to return different values for the Screen object in page's JavaScript?

Edit: This is CasperJS, not PhantomJS, so it's not a duplicate.

ygoe
  • 18,655
  • 23
  • 113
  • 210

4 Answers4

10

According official documentation you can do it using viewportSize option.

var casper = require("casper").create({
    // other options here
    viewportSize: {
        width: 1920,
        height: 1080
    }
}); 

It will be more lightweight solution than overriding viewport size after each page loading.

3

Here's how it works with CasperJS:

// at the start of the script file
var casper = require("casper").create({
    // other options here
    onPageInitialized: function (page) {
        page.evaluate(function () {
            window.screen = {
                width: 1920,
                height: 1080
            };
        });
    }
});

// script goes on here
ygoe
  • 18,655
  • 23
  • 113
  • 210
1

Another option like you can see here:

casper.options.viewportSize = {width: 1600, height: 950};
mrroot5
  • 1,811
  • 3
  • 28
  • 33
-1

You can set by this as well while defining functions:

casper.viewport(1300, 1000).then(function () {
     test.assertUrlMatches(/testing\.html$/);
});
Prateek.Naik
  • 556
  • 4
  • 18
  • That's what I did and mentioned in my question. The viewport is not what the screen object reports to the page's script. – ygoe Jul 25 '16 at 14:43