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