Как вызвать класс хранения сессии с весенней загрузкой - PullRequest
0 голосов
/ 28 апреля 2020

Мне нужно хранить и извлекать данные из хранилища сессий в моем проекте весенней загрузки. Я получил следующий класс для использования, но не уверен, как создать его сервис и создать необходимые bean-компоненты для его вызова.

import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.springframework.stereotype.Service;

@Service
public class SessionStorage {
  private JavascriptExecutor js;

  public SessionStorage(WebDriver driver) {
    this.js = (JavascriptExecutor) driver;
  }

  public void removeItemFromSessionStorage(String item) {
    js.executeScript(String.format(
            "window.sessionStorage.removeItem('%s');", item));
  }

  public boolean isItemPresentInSessionStorage(String item) {
    if (js.executeScript(String.format(
            "return window.sessionStorage.getItem('%s');", item)) == null)
        return false;
    else
        return true;
  }

  public String getItemFromSessionStorage(String key) {
    return (String) js.executeScript(String.format(
            "return window.sessionStorage.getItem('%s');", key));
  }

public String getKeyFromSessionStorage(int key) {
    return (String) js.executeScript(String.format(
            "return window.sessionStorage.key('%s');", key));
  }

  public Long getSessionStorageLength() {
    return (Long) js.executeScript("return window.sessionStorage.length;");
  }

  public void setItemInSessionStorage(String item, String value) {
    js.executeScript(String.format(
            "window.sessionStorage.setItem('%s','%s');", item, value));
  }

  public void clearSessionStorage() {
    js.executeScript(String.format("window.sessionStorage.clear();"));
  }

}

Я пытаюсь создать bean-компонент следующим образом:

@Bean
public WebDriver webDriver() {
    return new ChromeDriver();
}

наконец, в контроллере, пытающемся вызвать его

@Controller
public class IndexController {

@Autowired
SessionStorage sessionStorage;

@RequestMapping("/")
public String home(Map<String, Object> model) {
    sessionStorage.setItemInSessionStorage("browser_tab_id", randomString());
    String itemFromSessionStorage = sessionStorage.getItemFromSessionStorage("browser_tab_id");

    model.put("message", itemFromSessionStorage);
    return "index";
  }
}

Я получаю следующую ошибку:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 
'indexController': Unsatisfied dependency expressed through field 'sessionStorage'; nested exception 
is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 
'sessionStorage' defined in file [C:\projects\Code\gDocument\spring-boot- 
demo\target\classes\com\howtodoinjava\app\controller\SessionStorage.class]: Unsatisfied dependency 
 expressed through constructor parameter 0; nested exception is 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'webDriver' 
defined in com.howtodoinjava.app.controller.SpringBootWebApplication: Bean instantiation via factory 
 method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to 
 instantiate [org.openqa.selenium.WebDriver]: Factory method 'webDriver' threw exception; nested 
exception is java.lang.IllegalStateException: The path to the driver executable must be set by the 
webdriver.chrome.driver system property; for more information, see 
https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver. The latest version can be downloaded from 
http://chromedriver.storage.googleapis.com/index.html
...