2017-01-31 5 views
2

Я пытаюсь установить файл cookie в тестовом случае транспортира. Мы используем транспортир 3.3.0, Угловое 1.5.x и Node.js 6.9.1Настройка куки-файлов в транспортирщике

Это спецификация:

(function() { 
    'use strict'; 

    describe('Dummytest', function() { 
     beforeEach(function() { 
      browser.get('./'); 
     }); 

     it('should set a cookie', function() { 
      browser.manage().addCookie("test", "fail_cookie", '/', 'localhost'); 
     }); 
    }); 
})(); 

Это сообщение об ошибке я получаю:

 
    Message: 
    Failed: {"errorMessage":"Unable to set Cookie","request":{"headers":{"Accept-Encoding":"gzip,deflate","Connection":"Keep-Alive","Content-Length":"165","Content-Type":"application/json; charset=utf-8","Host":"localhost:45556","User-Agent":"Apache-HttpClient/4.5.1 (Java/1.8.0_77)"},"httpVersion":"1.1","method":"POST","post":"{\"cookie\":{\"path\":\"/\",\"domain\":\"localhost\",\"name\":\"test\",\"httpOnly\":false,\"hCode\":3556498,\"secure\":false,\"value\":\"fail_cookie\",\"class\":\"org.openqa.selenium.Cookie\"}}","url":"/cookie","urlParsed":{"anchor":"","query":"","file":"cookie","directory":"/","path":"/cookie","relative":"/cookie","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/cookie","queryKey":{},"chunks":["cookie"]},"urlOriginal":"/session/68875d10-f7b4-11f6-8f37-71161903ed83/cookie"}} 
    Build info: version: '2.52.0', revision: '4c2593c', time: '2016-02-11 19:06:42' 
    System info: host: 'XXXXXXXXX', ip: '10.##.##.230', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.8.0_77' 
    Driver info: driver.version: unknown 
    Stack: 
    UnableToSetCookieError: {"errorMessage":"Unable to set Cookie","request":{"headers":{"Accept-Encoding":"gzip,deflate","Connection":"Keep-Alive","Content-Length":"165","Content-Type":"application/json; charset=utf-8","Host":"localhost:45556","User-Agent":"Apache-HttpClient/4.5.1 (Java/1.8.0_77)"},"httpVersion":"1.1","method":"POST","post":"{\"cookie\":{\"path\":\"/\",\"domain\":\"localhost\",\"name\":\"test\",\"httpOnly\":false,\"hCode\":3556498,\"secure\":false,\"value\":\"fail_cookie\",\"class\":\"org.openqa.selenium.Cookie\"}}","url":"/cookie","urlParsed":{"anchor":"","query":"","file":"cookie","directory":"/","path":"/cookie","relative":"/cookie","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/cookie","queryKey":{},"chunks":["cookie"]},"urlOriginal":"/session/68875d10-f7b4-11f6-8f37-71161903ed83/cookie"}} 
    Build info: version: '2.52.0', revision: '4c2593c', time: '2016-02-11 19:06:42' 
    System info: host: 'XXXXXXXXXXXXX', ip: '10.##.##.230', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.8.0_77' 
    Driver info: driver.version: unknown 
     at WebDriverError (C:\Users\[username]\dev\project\node_modules\selenium-webdriver\error.js:27:5) 

Что я делаю неправильно?

EDIT:

Я сделал некоторые дальнейшие эксперименты. Обратите внимание, что я изменил домен и что нет browser.get до успешного чтения/записи cookie.

(function() { 
    'use strict'; 

    describe('Dummytest', function() { 
     it('should set a cookie', function() { 
      browser.manage().addCookie("test", "fail_cookie", '/', '127.0.0.1'); 
      browser.manage().getCookie('test').then(function(cookie) { 
       console.log('cookie test', cookie); 
       browser.get('./'); 
       browser.manage().getCookie('test').then(function(cookie) { 
        console.log('cookie test 2', cookie); 
       }); 
      }); 
     }); 
    }); 
})(); 

И это выход я получаю:

 
cookie test { path: '/', 
    domain: '127.0.0.1', 
    name: 'test', 
    httpOnly: false, 
    hCode: 3556498, 
    secure: false, 
    value: 'fail_cookie', 
    class: 'org.openqa.selenium.Cookie' } 
cookie test 2 null 

Как вы можете видеть, что печенье не установлен для домена я достигаю при вызове browser.get('./'). Как установить cookie для этого домена, не вызывая ошибку в моем исходном вопросе?

EDIT 2:

Найдено еще один вопрос (Setting cookies before browser.get), который говорит, чтобы позвонить browser.driver.get первым, а затем установить печенье, но сделать это я получаю тот же UnableToSetCookieError, как я всегда получал. Таким образом, решение - это нечто другое.

EDIT 3:

На полу связанной ноты я проявляющая реальные трудно найти документацию для addCookie функции и ее параметрами. Особенно сейчас, так как в последней версии (от 2016-01-31) версии транспортира он ожидает объект, а не список параметров. Но я, наконец, нашел его и думал, что я мог бы также включить ссылку здесь: https://github.com/SeleniumHQ/selenium/blob/022644c47c643ce6fe797d65e074329190129c1b/javascript/node/selenium-webdriver/lib/webdriver.js#L1075

EDIT 4:

Подойдя ближе! Настройка домена на .localhost (обратите внимание на точку (.) В начале), похоже, работает. Будут проводить дальнейшие расследования и отчитываться. Тем временем, если кто-нибудь скажет мне, почему точка важна, и почему эта точная работа домена, я был бы очень благодарен :)

+0

Взгляните на это: http://stackoverflow.com/questions/489369/can-i-use-localhost-as-the-domain-when-setting-an-http-cookie. Возможно, это может помочь? – cnishina

+1

Привет @Tobbe, Есть новости? Может быть, вы можете ответить на свой вопрос ради обмена результатами? Я читал, что есть проблемы с использованием 'localhost', и что использование« 127.0.0.1 »более целесообразно, но я все еще новичок и стараюсь сохранить сеансы живыми. – firepol

+0

Crap. Извините, забыл вернуться к этому, и теперь я забыл, что это за решение :(Теперь я с новой компанией и больше не имею доступа к коду, где это было необходимо. – Tobbe

ответ

1

Настройка базы Урl до 127.0.0.1 в моем protractor.conf.js, кажется, решает аналогичные вопрос, с которым я столкнулся.

Смежные вопросы