2015-07-15 2 views
0

Я использую Selenium HtmlUnitDriver и задаюсь вопросом, возможно ли как-то сохранить состояние этого драйвера.
Я имею в виду, что для проверки чего-то на странице мне нужно загрузить драйвер -> загрузить и добавить файлы cookie -> пройти страницу входа в систему -> получить требуемую страницу. Это занимает слишком много времени, чтобы делать это каждый раз.
Есть ли что-то вроде «состояния сервера» или, может быть, мне нужно сериализовать и сохранить драйвер? Спасибо.Сохранение браузера Selenium active

+0

Вам также не нужно проходить страницу входа, если вы также устанавливаете файлы cookie. Вы уверены, что файлы cookie работают? Некоторые браузеры запрещают вам устанавливать файлы cookie, если окно браузера уже не просматривает страницу на одном сайте, поэтому вам, возможно, придется перейти к, например, (или пустую страницу на том же сайте) перед настройкой файлов cookie. – Beetle

+0

Да, я знаю об этом. Cookies работают, и мне не нужно входить в систему каждый раз. Но все-таки эта навигация каждый раз требует времени. Было бы неплохо иметь копию этого драйвера на определенной странице. Конечно, если это возможно. – IgorZ

ответ

0

Поскольку мне удалось решить мой вопрос, я оставлю это здесь:
1. Я взял selenium-server-standalone и запустить его с -browserSessionReuse -timeout 3600 -browserTimeout 600 сохранить свою сессию в живых.
2. Сделано мой класс:

public class MyRemoteWebDriver extends RemoteWebDriver { 
.... 
@Override 
protected void startSession(Capabilities desiredCapabilities, Capabilities requiredCapabilities) { 
    String sid = loadSessionID("SID_NAME"); 
    if (sid != null) { 
     super.startSession(desiredCapabilities, requiredCapabilities); 
     log.info("Old SID: " + sid); 
     setSessionId(sid); 
     try { 
      getCurrentUrl(); 
      log.info("Old url: " + getCurrentUrl()); 
     } catch (WebDriverException e) { 
      sid = null; 
     } 
    } 
    if (sid == null) { 
     super.startSession(desiredCapabilities, requiredCapabilities); 
     saveSessionID(getSessionId().toString()); 
     log.info("New SID: " + getSessionId().toString()); 
    } 
    } 
} 

Итак, таким образом, я могу хранить этот SESSIONID в БД и повторно использовать его.

0

Вы можете попробовать использовать однотонный webdriver вместо создания одного для каждого теста. Нечто подобное:

class SingletonWebdriver { 
    private static Webdriver driver; 
    public static Webdriver getDriver() { 
     if(driver == null) { 
      createDriver(); 
     } 
     return driver; 
    } 
} 

И тогда вы можете вызвать getDriver получить тот же драйвер, но во многих случаях это хорошая практика, чтобы сделать каждое испытание в Diferent сессии.

+0

Я использую такой синглэнд webdriver в своем приложении. Возможно, я ошибся, но мне нужно остановить все приложение, чтобы внести изменения и запустить его снова. Этот синглтон не поможет мне в этом случае. – IgorZ

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