来自Highcharts的不一致的SVG元素使Geb / Selenium和PhantomJS的测试失败

时间:2015-02-10 17:44:56

标签: selenium highcharts phantomjs geb

无法解释这个问题:

我的Geb / Selenium测试正在对由Highcharts生成的SVG rect元素宽度/高度进行断言。

测试在Chrome / Windows上本地传递,并在Linux CI环境中传递PhantomJS。但是,当我在Windows上本地运行PhantomJS时,它们会失败。高度似乎是几个像素 - 一致,当我在Windows上的PhantomJS本地运行时,它大约是1或2像素。例如,我断言rect.height=168失败,因为它是166

我已经确认它在两种环境中都是相同版本的PhantomJS。

我还能错过什么?什么可能导致Highcharts在Chrome和PhantomJS中生成不同的SVG?

我可以将它与测试框架隔离开来并直接与PhantomJS一起执行:

var webpage = require('webpage');
var page = webpage.create();
page.viewportSize = {width: 1280, height: 1024};

page.open("http://www.highcharts.com/demo/column-basic", function(status) {
    var height = page.evaluate(function() {
      return jQuery('g.highcharts-series rect:nth(0)').attr('height');
    });
    console.log(height);
    phantom.exit(); 
});

此代码将在Linux上运行时打印52,在Windows时运行53

1 个答案:

答案 0 :(得分:0)

这取决于您要测试的内容,但这可能是适应舍入问题的解决方案。检测底层操作系统并使用每个操作系统的dpi更正设置配置对象。

var webpage = require('webpage'),
  page = webpage.create(),
  system = require('system'),
  os = system.os,
  correction = {
    mac: 1,
    windows: 1.019
  };

page.viewportSize = {
  width: 1280,
  height: 1024
};

page.open("http://www.highcharts.com/demo/column-basic", function(status) {
  var height = page.evaluate(function() {
    return jQuery('g.highcharts-series rect:nth(0)').attr('height');
  });

  console.log(Math.round(height * correction[os.name]));

  phantom.exit();
});