package browser import ( "errors" "local/storage" "sync" "github.com/tebeka/selenium" ) type MockDriver struct { Ret *sync.Map } var notImpl = errors.New("not impl") func (wd MockDriver) Quit() error { return nil } func (wd MockDriver) Close() error { return nil } func (wd MockDriver) Get(string) error { return nil } func (wd MockDriver) GetCookies() ([]selenium.Cookie, error) { return []selenium.Cookie{}, nil } func (wd MockDriver) GetCookie(string) (selenium.Cookie, error) { return selenium.Cookie{}, nil } func (wd MockDriver) AddCookie(*selenium.Cookie) error { return nil } func (wd MockDriver) FindElement(_ string, key string) (selenium.WebElement, error) { v, err := wd.FindElements("", key) if err != nil { return nil, err } return v[0], nil } func (wd MockDriver) FindElements(_ string, key string) ([]selenium.WebElement, error) { we := []selenium.WebElement{} if v, ok := wd.Ret.Load(key); ok { w, _ := v.([]MockElement) for i := range w { we = append(we, w[i]) } return we, nil } return nil, storage.ErrNotFound } type MockElement struct { selenium.WebElement Ret map[string][]MockElement Txt string Attrs map[string]string } func (we MockElement) FindElement(_ string, key string) (selenium.WebElement, error) { v, err := we.FindElements("", key) if err != nil { return nil, err } return v[0], nil } func (we MockElement) FindElements(_ string, key string) ([]selenium.WebElement, error) { elems := []selenium.WebElement{} if v, ok := we.Ret[key]; ok { for i := range v { elems = append(elems, v[i]) } return elems, nil } return nil, storage.ErrNotFound } func (we MockElement) Text() (string, error) { return we.Txt, nil } func (we MockElement) GetAttribute(key string) (string, error) { v, _ := we.Attrs[key] return v, nil } func (we MockElement) Click() error { return notImpl } func (we MockElement) SendKeys(keys string) error { return notImpl } func (we MockElement) Submit() error { return notImpl } func (we MockElement) Clear() error { return notImpl } func (we MockElement) MoveTo(int, int) error { return notImpl } func (we MockElement) TagName() (string, error) { return "", notImpl } func (we MockElement) IsSelected() (bool, error) { return false, notImpl } func (we MockElement) IsEnabled() (bool, error) { return false, notImpl } func (we MockElement) IsDisplayed() (bool, error) { return false, notImpl } func (we MockElement) Location() (*selenium.Point, error) { return nil, notImpl } func (we MockElement) LocationInView() (*selenium.Point, error) { return nil, notImpl } func (we MockElement) Size() (*selenium.Size, error) { return nil, notImpl } func (we MockElement) CSSProperty(name string) (string, error) { return "", notImpl } func (we MockElement) Screenshot(bool) ([]byte, error) { return nil, notImpl } func NewMockDriver(elements *sync.Map) *MockDriver { return &MockDriver{ Ret: elements, } }