1

J'essaye d'écrire des tests unitaires de barebones en utilisant selenium-webdriver. Afin de tester correctement mon application, je dois préparer chaque cas de test avec un cookie.Comment puis-je ajouter correctement un cookie en utilisant selenium-webdriver?

Je suis en train de faire ce qui suit:

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.... 
}); 

Mes tests exécutés (c.-à-appeler addCookie ne lève/rejette pas), mais les valeurs de cookie jeu ne sera pas utilisé lorsque le navigateur fait une demande contre mon application.

Quand je tente de me connecter les cookies Posé comme:

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); 

il me dira qu'il n'y a pas les cookies ont été fixés:

set [] 

J'ai aussi creusé dans les sources de selenium-webdriver et capables de utilisez le débogueur pour savoir que la chaîne de cookie correcte sera construite et enqueued here.

Comment ajouter correctement un cookie pour qu'il soit utilisé par l'instance du pilote?


Pour ceux qui se demandent à propos async/await, j'ai désactivé les promesses gérées en utilisant:

webdriver.promise.USE_PROMISE_MANAGER = false; 

Répondre

2

La méthode addCookie ajouter un cookie au domaine actuel, de sorte que vous devrez d'abord accéder à la cible URL pour définir le domaine:

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

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

+0

Cela signifie-t-il que si mon serveur a besoin du navigateur pour envoyer le cookie, j'ai besoin d'utiliser 'get' =>' addCookie' => 'get' ou y a-t-il un raccourci? – m90

+0

Je ne suis au courant d'aucun raccourci. Vous n'avez besoin d'appeler 'get' que si le domaine actuel n'est pas celui attendu pour le cookie. Le cookie restera alors et sera envoyé au serveur tant que le navigateur reste ouvert. –