使用navigator.userAgent进行Chromeheadless的PhantomJS

时间:2017-10-07 23:13:04

标签: angularjs karma-runner karma-jasmine google-chrome-headless

我正在我的项目中将PhantomJS迁移到Chromeheadless。该项目在Angular1.x中编写,并有* .spec.js文件进行测试。我已完成以下更改以使用Chromeheadless。

karma.conf.js

// browsers: ['PhantomJS']
browsers: ['ChromeHeadless']

的package.json

"karma": "^1.7.1",
"karma-chrome-launcher": "^2.2.0"

测试失败,* .spec.js设置不同的userAgent。

window.navigator = {
  userAgent: 'Firefox;'
}

window.navigator = {
  userAgent: 'iPad;'
}

这对于PhantomJS工作正常,但为ChromeHeadless抛出"cannot assign to readonly property navigator of object '#<Window>'"

以下是我获取Window对象的方法。

myfile.spec.js

'use strict';
describe('My test description', function(){
  var rootScope, compile, window, $document, browser, scope, timeout;
  beforeEach(inject(function($rootScope, $compile, $window, _$document_, _browser_, $timeout;){
    rootScope = $rootScope;
    compile = $compile;
    window = $window;
    $document = _$document_;
    browser = _browser_;
    timeout = $timeout;
  }));
  ...
  ...
  ...
});

在互联网上搜索,无法找到与我的问题相关的任何解决方案或主题。应该做些什么更改才能使窗口对象不是只读的,以便我可以分配其他userAgent?任何人都可以帮忙吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

这会产生因为在严格模式下无法分配只读属性,并且出于某种原因,PhantomJS不会捕获它。我已经遇到过PhantomJS的其他一些问题,比如数组排序。

我不知道您是否需要它,但如果您删除'use strict',您可能会看到此错误不再出现。

更新: 尝试像这样设置用户代理:

Object.defineProperty(window.navigator, 'userAgent', {value: 'Firefox'});

Object.defineProperty(window.navigator, 'userAgent', {value: 'iPad'});