|
package web |
|
|
|
import ( |
|
"fmt" |
|
"runtime/debug" |
|
"strings" |
|
"testing" |
|
"time" |
|
|
|
"github.com/sclevine/agouti" |
|
"github.com/stretchr/testify/assert" |
|
) |
|
|
|
type Page struct { |
|
*agouti.Page |
|
T *testing.T |
|
Driver *agouti.WebDriver |
|
Quit chan struct{} |
|
} |
|
|
|
func (page *Page) Destroy() { |
|
if r := recover(); r != nil { |
|
debug.PrintStack() |
|
fmt.Println("Recovered in f", r) |
|
_ = page.Page.Destroy() |
|
_ = page.Driver.Stop() |
|
page.T.Fail() |
|
page.Quit <- struct{}{} |
|
} |
|
} |
|
|
|
func (page *Page) Wait(t int) { |
|
time.Sleep(time.Duration(t) * time.Second) |
|
} |
|
|
|
func (page *Page) Contain(s string) { |
|
content, err := page.HTML() |
|
assert.Equal(page.T, err, nil) |
|
assert.Equal(page.T, strings.Contains(content, s), true) |
|
} |
|
|
|
func (page *Page) NoContain(s string) { |
|
content, err := page.HTML() |
|
assert.Equal(page.T, err, nil) |
|
assert.Equal(page.T, strings.Contains(content, s), false) |
|
} |
|
|
|
func (page *Page) Css(xpath, css, res string) { |
|
style, err := page.FindByXPath(xpath).CSS(css) |
|
assert.Equal(page.T, err, nil) |
|
assert.Equal(page.T, style, res) |
|
} |
|
|
|
func (page *Page) CssS(s *agouti.Selection, css, res string) { |
|
style, err := s.CSS(css) |
|
assert.Equal(page.T, err, nil) |
|
assert.Equal(page.T, style, res) |
|
} |
|
|
|
func (page *Page) Text(xpath, text string) { |
|
mli1, err := page.FindByXPath(xpath).Text() |
|
assert.Equal(page.T, err, nil) |
|
assert.Equal(page.T, mli1, text) |
|
} |
|
|
|
func (page *Page) MoveMouseBy(xOffset, yOffset int) { |
|
assert.Equal(page.T, page.Page.MoveMouseBy(xOffset, yOffset), nil) |
|
} |
|
|
|
func (page *Page) Display(xpath string) { |
|
page.Css(xpath, "display", "block") |
|
} |
|
|
|
func (page *Page) Nondisplay(xpath string) { |
|
page.Css(xpath, "display", "none") |
|
} |
|
|
|
func (page *Page) Value(xpath, value string) { |
|
val, err := page.FindByXPath(xpath).Attribute("value") |
|
assert.Equal(page.T, err, nil) |
|
assert.Equal(page.T, val, value) |
|
} |
|
|
|
func (page *Page) Click(xpath string, intervals ...int) { |
|
assert.Equal(page.T, page.FindByXPath(xpath).Click(), nil) |
|
interval := 1 |
|
if len(intervals) > 0 { |
|
interval = intervals[0] |
|
} |
|
page.Wait(interval) |
|
} |
|
|
|
func (page *Page) ClickS(s *agouti.Selection, intervals ...int) { |
|
assert.Equal(page.T, s.Click(), nil) |
|
interval := 1 |
|
if len(intervals) > 0 { |
|
interval = intervals[0] |
|
} |
|
page.Wait(interval) |
|
} |
|
|
|
func (page *Page) Attr(s *agouti.Selection, attr, res string) { |
|
style, err := s.Attribute(attr) |
|
assert.Equal(page.T, err, nil) |
|
assert.Equal(page.T, style, res) |
|
} |
|
|
|
func (page *Page) Fill(xpath, content string) { |
|
assert.Equal(page.T, page.FindByXPath(xpath).Fill(content), nil) |
|
} |
|
|
|
func (page *Page) NavigateTo(path string) { |
|
assert.Equal(page.T, page.Navigate(path), nil) |
|
page.Wait(2) |
|
} |
|
|