github.com/kotovmak/go-admin@v1.1.1/tests/web/page.go (about)

     1  package web
     2  
     3  import (
     4  	"fmt"
     5  	"runtime/debug"
     6  	"strings"
     7  	"testing"
     8  	"time"
     9  
    10  	"github.com/sclevine/agouti"
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  type Page struct {
    15  	*agouti.Page
    16  	T      *testing.T
    17  	Driver *agouti.WebDriver
    18  	Quit   chan struct{}
    19  }
    20  
    21  func (page *Page) Destroy() {
    22  	if r := recover(); r != nil {
    23  		debug.PrintStack()
    24  		fmt.Println("Recovered in f", r)
    25  		_ = page.Page.Destroy()
    26  		_ = page.Driver.Stop()
    27  		page.T.Fail()
    28  		page.Quit <- struct{}{}
    29  	}
    30  }
    31  
    32  func (page *Page) Wait(t int) {
    33  	time.Sleep(time.Duration(t) * time.Second)
    34  }
    35  
    36  func (page *Page) Contain(s string) {
    37  	content, err := page.HTML()
    38  	assert.Equal(page.T, err, nil)
    39  	assert.Equal(page.T, strings.Contains(content, s), true)
    40  }
    41  
    42  func (page *Page) NoContain(s string) {
    43  	content, err := page.HTML()
    44  	assert.Equal(page.T, err, nil)
    45  	assert.Equal(page.T, strings.Contains(content, s), false)
    46  }
    47  
    48  func (page *Page) Css(xpath, css, res string) {
    49  	style, err := page.FindByXPath(xpath).CSS(css)
    50  	assert.Equal(page.T, err, nil)
    51  	assert.Equal(page.T, style, res)
    52  }
    53  
    54  func (page *Page) CssS(s *agouti.Selection, css, res string) {
    55  	style, err := s.CSS(css)
    56  	assert.Equal(page.T, err, nil)
    57  	assert.Equal(page.T, style, res)
    58  }
    59  
    60  func (page *Page) Text(xpath, text string) {
    61  	mli1, err := page.FindByXPath(xpath).Text()
    62  	assert.Equal(page.T, err, nil)
    63  	assert.Equal(page.T, mli1, text)
    64  }
    65  
    66  func (page *Page) MoveMouseBy(xOffset, yOffset int) {
    67  	assert.Equal(page.T, page.Page.MoveMouseBy(xOffset, yOffset), nil)
    68  }
    69  
    70  func (page *Page) Display(xpath string) {
    71  	page.Css(xpath, "display", "block")
    72  }
    73  
    74  func (page *Page) Nondisplay(xpath string) {
    75  	page.Css(xpath, "display", "none")
    76  }
    77  
    78  func (page *Page) Value(xpath, value string) {
    79  	val, err := page.FindByXPath(xpath).Attribute("value")
    80  	assert.Equal(page.T, err, nil)
    81  	assert.Equal(page.T, val, value)
    82  }
    83  
    84  func (page *Page) Click(xpath string, intervals ...int) {
    85  	assert.Equal(page.T, page.FindByXPath(xpath).Click(), nil)
    86  	interval := 1
    87  	if len(intervals) > 0 {
    88  		interval = intervals[0]
    89  	}
    90  	page.Wait(interval)
    91  }
    92  
    93  func (page *Page) ClickS(s *agouti.Selection, intervals ...int) {
    94  	assert.Equal(page.T, s.Click(), nil)
    95  	interval := 1
    96  	if len(intervals) > 0 {
    97  		interval = intervals[0]
    98  	}
    99  	page.Wait(interval)
   100  }
   101  
   102  func (page *Page) Attr(s *agouti.Selection, attr, res string) {
   103  	style, err := s.Attribute(attr)
   104  	assert.Equal(page.T, err, nil)
   105  	assert.Equal(page.T, style, res)
   106  }
   107  
   108  func (page *Page) Fill(xpath, content string) {
   109  	assert.Equal(page.T, page.FindByXPath(xpath).Fill(content), nil)
   110  }
   111  
   112  func (page *Page) NavigateTo(path string) {
   113  	assert.Equal(page.T, page.Navigate(path), nil)
   114  	page.Wait(2)
   115  }