如何使用selenium-webdriver正确添加cookie?

时间:2017-09-18 14:30:47

标签: javascript selenium selenium-webdriver mocha selenium-chromedriver

我尝试使用selenium-webdriver编写裸骨单元测试。为了正确测试我的应用程序,我需要用cookie准备每个测试用例。

我正在尝试执行以下操作:

it('should set cookies', async function() {
    const driver = new webdriver.Builder().forBrowser('chrome').build();
    driver.manage().window().setSize(800, 600);
    await driver.manage().addCookie({
        name: 'KEY',
        value: 'COOKIE-VALUE',
        domain: '.my.domain',
        path: '/',
        secure: false
    });
    await driver.get('http://test.my.domain');
    // test following....
});

我的测试运行(即调用addCookie不会抛出/拒绝),但是当浏览器对我的应用程序发出请求时,将不会使用设置的cookie值。

当我尝试记录设置的cookie时:

await driver.manage().addCookie({
    name: 'KEY',
    value: 'COOKIE-VALUE',
    domain: '.my.domain',
    path: '/',
    secure: false
});

const set = await driver.manage().getCookies();
console.log('set', set);

它会告诉我没有设置cookie:

set []

我还挖掘了selenium-webdriver的来源,并且能够使用调试器找出将构造正确的cookie字符串并enqueued here

如何正确添加cookie以便驱动程序实例使用它?

对于那些对async/await感到疑惑的人,我使用以下方法禁用了托管的承诺:

webdriver.promise.USE_PROMISE_MANAGER = false;

1 个答案:

答案 0 :(得分:2)

方法 $scope.loadtable = function (task){ var bgUrl = "cloudantlink"; $http.get(bgUrl) .success(function (response) { var filePromises =[]; for(var i =0;i<response.rows.length;i++){ var fileUrl = "cloudantURL"; // Saving the promises filePromises[i] = $http.get(fileUrl, {responseType:'arraybuffer'}) .then(function success(response) { var file = new Blob([response], {type: 'application/pdf'}); var fileURL = URL.createObjectURL(file); // This will be the result when the promise is resolved return $sce.trustAsResourceUrl(fileURL); }, function error(data) { }); } // Waiting for the promises $q.all(filePromises).then(function(fileUrls) { // fileUrls contain the results returned by the success callback $scope.TableData = fileUrls.map(function(url) { return { 'download' : '<a href=\"'+url+'\">' + url+'</a>', }; }) $scope.loadTable(); }) }).error(function(data){ });向当前域添加Cookie,因此您首先必须导航到目标网址以设置域名:

addCookie

https://w3c.github.io/webdriver/webdriver-spec.html#add-cookie