2014-10-02 2 views
2

Я использую Node.js с пакетом selenium-webdriver для запуска моих тестов.
при каждом запуске теста веб-драйвер запускает новый сеанс и открывает новое окно.
Я пытаюсь получить идентификатор сеанса и использовать его позже с помощью getSession() (doc referance link)selenium js webdriver - присоединить к активной сессии

var webdriver = require('selenium-webdriver'); 
var SeleniumServer = require('selenium-webdriver/remote').SeleniumServer; 

var server = new SeleniumServer('./seleniumServer/selenium-server-standalone-2.43.1.jar', { 
    port: 4444 
}); 
server.start(); 

var driver = new webdriver.Builder() 
     .usingServer(server.address()) 
     .withCapabilities(webdriver.Capabilities.firefox()) 
     .build(); 

console.log(driver.getSession()); 

Но это вызывает исключение:

getSession(); 
^ 
TypeError: Object [object Object] has no method 'getSession' 
    at Object.<anonymous> (\testing\demo_1.js:14:3) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Function.Module.runMain (module.js:497:10) 
    at startup (node.js:119:16) 
    at node.js:906:3 

Может кто-нибудь сказать мне, что случилось с ним, и как Я получаю и задаю идентификатор сеанса селена?
Самое главное, как использовать sessionId для присоединения к открытой сессии браузера?

ответ

0

Вы должны искать файлы cookie для продолжения сеансов. webdriver.WebDriver.Options docs should help. Один из способов добиться этого - сохранить файлы cookie во внешний файл перед тем, как выйти из сеанса и загружать файлы cookie из этого внешнего файла каждый раз, когда вы запускаете тест.

+1

ОП не говорим о сессии браузера а сеанс Селена. – Louis

-1

Попробуйте использовать attachToSession() так:

webdriver.attachToSession(sessionId); 

Также см the docs для получения дополнительной информации.

2

Если ваша процедура создания веб-портала прошла успешно, driver должен иметь способ getSession(). Документацию getSession() можно найти here.

Однако, то, что возвращается getSession(), является обещанием, поэтому вы не получите идентификатор сеанса непосредственно из возвращаемого значения. Вы должны сделать это:

driver.getSession() 
       .then(function(session){ 
        var session_id = session.getId(); 
       }); 

Очень вероятно, что вам нужно, чтобы сохранить идентификатор сессии в файл, а затем при запуске программы в следующий раз, приложить к этому идентификатору сессии с помощью этой функции:

browser = webdriver.WebDriver.attachToSession(...); 

, документацию которой можно найти here.

Однако проблема связана с тем, что вышеуказанный вызов функции attachToSession() не уведомляет вас о том, удалось ли это сделать. Способ, которым я работал, - вызвать browser.getTitle() с использованием возвращаемого объекта WebDriver и дождаться его разрешения/отклонения. И мы узнаем, успешно ли мы прикреплены к идентификатору сеанса.


Настройка WebDriver:

В ответ на вопрос user3789620 «ы, я поставил код для создания WebDriver здесь:

var webdriver_server = 'http://localhost:9515', // chromedriver.exe serves at this port 
chrome = require('selenium-webdriver/chrome'), 
options = new chrome.Options(), 
webdriver = require('selenium-webdriver'), 
Http = require('selenium-webdriver/http'); 
options.setChromeBinaryPath(your_chrome_binary_path); 

var browser = new webdriver.Builder() 
    .withCapabilities(webdriver.Capabilities.chrome()) 
    .setChromeOptions(options) 
    .usingServer(webdriver_server) 
    .build() 

if('undefined' != typeof saved_session_id && saved_session_id!= ""){ 
    console.log("Going to attach to existing session of id: " + saved_session_id); 
    client = new Http.HttpClient(webdriver_server); 
    executor = new Http.Executor(client); 
    browser = webdriver.WebDriver.attachToSession(executor, saved_session_id); 
} 
+0

Получение sessionID очень просто, но как я могу его прикрепить? Я использую синтаксис из примеров, чтобы создать драйвер с var driver = new webdriver.Builder() .forBrowser ('chrome') .построить(); Как я могу подключиться к идентификатору моего предыдущего сеанса? – AdrianLoer

+0

@ user3789620 Вам необходимо правильно настроить webdriver. Я добавил некоторые коды в конце моего первоначального ответа. Попробуйте посмотреть, работает ли он. – gm2008

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