Гость
Map
Форумы / Тестирование и QA [игнор отключен] [закрыт для гостей] / Проблема с Selenium driver.manage().addCookie() / 1 сообщений из 1, страница 1 из 1
08.04.2014, 11:07
    #38608109
Anjey aka PM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с Selenium driver.manage().addCookie()
Суть задачи:

Необходимо в пределах одного теста иметь доступ к нескольким сессиям одного и того же браузера (сессии отличаются определенным набором cookie).

Как решали:

После успешного входа запоминаем текущие cookie браузера
Код: java
1.
        userCookies[i] = driver.manage().getCookies();


И очищаем их
Код: java
1.
        driver.manage().deleteAllCookies();


Тут проблем нет. При необходимости доступа к сайту под конкретным пользователем (сиречь в контексте конкретной сессии) куки восстанавливаем:
Код: java
1.
        cookiesRestore(userCookies[i]);


Код оной cookiesRestore выглядит так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    public void cookiesRestore(Set<Cookie> cookies) throws Exception 
    {
        for (Cookie cookie : cookies) {
            Cookie.Builder cb = new Cookie.Builder(cookie.getName(), cookie.getValue());
            // Remove "." from beginning to avoid exception about setting cookie for different domain
            cb.domain(cookie.getDomain().replaceFirst("^\\.", ""));
            cb.expiresOn(cookie.getExpiry());
            cb.path(cookie.getPath());
            driver.manage().addCookie(cb.build());
        }
    }



В этом месте все также хорошо, сессия осстанавливается и сайт отображает персонализированную информацию.

Суть проблемы:

После того как cookie были восстановлены с помощью addCookie удалить их сервером не представляется возможным.

Более детальная информация:
Порядок запросов ( скрин с пруфом ):

http://example.com/community/1_7_0_2/customer/account/logout/


http://example.com/community/1_7_0_2/customer/account/logoutSuccess/
Не этом этапе сервер запрашивает удаление Cookie

Request Headers
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
GET /community/1_7_0_2/customer/account/logoutSuccess/ HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer:  http://example.com/community/1_7_0_2/electronics/cell-phones.html 
Cookie: GSBC_CUSTOMER_GROUP=f4aee0ff13df6562b7efcb1096bc17a9; GSBC_FORM_KEY=f2PpIsRnipHcW6ZQ; GSBC_CUSTOMER=852f1523f81eb1ecb073e2b05601d571; frontend=454pi1d5dofp897ae5ua66jiu5; GSBC_FORM_KEY_HASH=1e668ce4d2f2979c0237d7a51546e9ac; GSBC_CUSTOMER=852f1523f81eb1ecb073e2b05601d571; GSBC_CUSTOMER_GROUP=f4aee0ff13df6562b7efcb1096bc17a9; GSBC_FORM_KEY=f2PpIsRnipHcW6ZQ; GSBC_FORM_KEY_HASH=1e668ce4d2f2979c0237d7a51546e9ac; GSBC_CATALOG_CATEGORY_SESSION_PARAMS=eNoDAAAAAAE%3D3e5d2975d
Connection: keep-alive

Response Headers
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
HTTP/1.1 200 OK
Date: Tue, 08 Apr 2014 09:43:12 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.3.10
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: frontend=454pi1d5dofp897ae5ua66jiu5; expires=Tue, 08-Apr-2014 10:43:12 GMT; path=/community/1_7_0_2; domain=example.com
GSBC_CUSTOMER=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/community/1_7_0_2; domain=example.com
GSBC_CUSTOMER_GROUP=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/community/1_7_0_2; domain=example.com
GSBC_MESSAGE_COOKIE=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/community/1_7_0_2; domain=example.com
GSBC_FORM_KEY=f2PpIsRnipHcW6ZQ; expires=Tue, 08-Apr-2014 10:43:12 GMT; path=/community/1_7_0_2; domain=example.com
GSBC_FORM_KEY_HASH=1e668ce4d2f2979c0237d7a51546e9ac; expires=Tue, 08-Apr-2014 10:43:12 GMT; path=/community/1_7_0_2; domain=example.com
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
Content-Length: 5625
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8


Обратите внимание на запрос удаления кук GSBC_CUSTOMER и GSBC_CUSTOMER_GROUP


http://example.com/community/1_7_0_2/
По непонятной причине куки, которые были удалены на предыдущем этапе снова посылаются на сервер на этом этапе
Request Headers
GET /community/1_7_0_2/ HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://example.com/community/1_7_0_2/customer/account/logoutSuccess/
Cookie: GSBC_CUSTOMER_GROUP=f4aee0ff13df6562b7efcb1096bc17a9; GSBC_FORM_KEY=f2PpIsRnipHcW6ZQ; GSBC_CUSTOMER=852f1523f81eb1ecb073e2b05601d571; frontend=454pi1d5dofp897ae5ua66jiu5; GSBC_FORM_KEY_HASH=1e668ce4d2f2979c0237d7a51546e9ac; GSBC_FORM_KEY=f2PpIsRnipHcW6ZQ; GSBC_FORM_KEY_HASH=1e668ce4d2f2979c0237d7a51546e9ac; frontend=454pi1d5dofp897ae5ua66jiu5; GSBC_CATALOG_CATEGORY_SESSION_PARAMS=eNoDAAAAAAE%3D3e5d2975d
Connection: keep-alive

Обратите внимание на cookie GSBC_CUSTOMER_GROUP и GSBC_CUSTOMER.

До момента пока не начали манипулировать cookie подобной проблемы не существовало.

Код, который генерирует вереницу запросов с редиректом и восстановлением куки:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
        cookiesRestore(userCookies[i]);
        driver.get(baseUrl + "/electronics/cell-phones.html");
        /** 
         * logoutButton declared as:
         *
         * @FindBy(xpath = "//a[@title='Log Out']")
         * private WebElement logoutButton;
         */
        logoutButton.click();
...
Рейтинг: 0 / 0
Форумы / Тестирование и QA [игнор отключен] [закрыт для гостей] / Проблема с Selenium driver.manage().addCookie() / 1 сообщений из 1, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]