rssmon3/copart/browser/mockselenium.go

92 lines
3.1 KiB
Go

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,
}
}