Protractor测试,访问和修改Window对象属性

6
我正在尝试为我们项目中使用的身份验证编写一个简单的端到端测试,认证基于设置在 window.localStorage.satellizer_token 中的 json web token。
我使用以下代码来设置它,但从我看到的来看,它并没有真正设置窗口对象的 localStorage 属性。
describe('login', function () {
it('should set the satellizer token and be allowed to get panel', function () {
    browser.driver.get('http://example.com/');
    browser.driver.executeScript(function () {
        return window.localStorage;
    }).then(function (localStorage) {
        expect(localStorage.satellizer_token).toBe(undefined);
        localStorage.satellizer_token = "eyJ0fdaccKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IjE3MjUzIiwiaWF0IjoxNDM0Mzc1NjU3LCJleHAiOjE0NjU5Mjk2NTd9.VbhdWQ_gOb7X8pmOGLDjBKURxcaWQlIXQGvLRansQCphk";
        expect(localStorage.satellizer_token).toBe("eyJ0fdaccKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IjE3MjUzIiwiaWF0IjoxNDM0Mzc1NjU3LCJleHAiOjE0NjU5Mjk2NTd9.VbhdWQ_gOb7X8pmOGLDjBKURxcaWQlIXQGvLRansQCphk");
        browser.driver.get('http://example.com/panel');
        expect(browser.driver.getTitle()).toEqual('http://example.com/panel');
        expect(browser.driver.getCurrentUrl()).toEqual('http://example.com/panel');
    });
});

我知道已经有类似的内容在这里在这里,但我能找到的所有示例都是关于只访问,而我需要修改window属性。

在protractor测试中,与window对象交互的正确方法是什么?

});

2个回答

5

可行的解决方案:

    browser.executeScript(function () {
        window.localStorage.satellizer_token = "eyJ0eXAiOiJKV1QiLCJhbGasdsOiJIUzI1NiJ9.eyJpZCI6IjE3MjUzIiwiaWF0IjoxNDM0Mzc1NjU3LCJleHAiOjE0NjU5Mjk2NTd9.VbhdWQ_gOb7X8pmOGLDjBKURQUQlcAfGSGvLRansQCphk";
    });

0

从外观上看,窗口方法只有一组预定义的方法与窗口对象进行交互,但它不允许我设置新属性。 - pietrovismara
1
确切的。因为它返回的是一个接口,定义如下:http://angular.github.io/protractor/#/api?view=webdriver.WebDriver.Window。如果你想以自定义方式管理窗口对象,我认为你现在的做法是可以的。我建议你只是将回调匿名函数声明在执行脚本之外,以便更好地重用它,例如:var localStorageSetter = function () { window.localStorage.satellizer_token = 'whatever'; } browser.executeScript(localStorageSetter); - David Pelayo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接