92 lines
3.1 KiB
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,
|
|
}
|
|
}
|