...

Source file src/github.com/playwright-community/playwright-go/tests/console_message_test.go

Documentation: github.com/playwright-community/playwright-go/tests

     1  package playwright_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/playwright-community/playwright-go"
     7  	"github.com/stretchr/testify/require"
     8  )
     9  
    10  func TestConsoleShouldWork(t *testing.T) {
    11  	BeforeEach(t)
    12  	defer AfterEach(t)
    13  	messages := make(chan playwright.ConsoleMessage, 1)
    14  	page.Once("console", func(message playwright.ConsoleMessage) {
    15  		messages <- message
    16  	})
    17  	_, err := page.Evaluate(`() => console.log("hello", 5, {foo: "bar"})`)
    18  	require.NoError(t, err)
    19  	message := <-messages
    20  	if !isFirefox {
    21  		require.Equal(t, message.Text(), "hello 5 {foo: bar}")
    22  		require.Equal(t, message.String(), "hello 5 {foo: bar}")
    23  	} else {
    24  		require.Equal(t, message.Text(), "hello 5 JSHandle@object")
    25  		require.Equal(t, message.String(), "hello 5 JSHandle@object")
    26  	}
    27  	require.Equal(t, message.Type(), "log")
    28  	jsonValue1, err := message.Args()[0].JSONValue()
    29  	require.NoError(t, err)
    30  	require.Equal(t, "hello", jsonValue1)
    31  	jsonValue2, err := message.Args()[1].JSONValue()
    32  	require.NoError(t, err)
    33  	require.Equal(t, 5, jsonValue2)
    34  	jsonValue3, err := message.Args()[2].JSONValue()
    35  	require.NoError(t, err)
    36  	require.Equal(t, map[string]interface{}{
    37  		"foo": "bar",
    38  	}, jsonValue3)
    39  }
    40  
    41  func TestConsoleShouldEmitSameLogTwice(t *testing.T) {
    42  	BeforeEach(t)
    43  	defer AfterEach(t)
    44  	messages := make(chan string, 2)
    45  	page.On("console", func(message playwright.ConsoleMessage) {
    46  		messages <- message.Text()
    47  	})
    48  	_, err := page.Evaluate(`() => { for (let i = 0; i < 2; ++i ) console.log("hello"); } `)
    49  	require.NoError(t, err)
    50  	m1 := <-messages
    51  	m2 := <-messages
    52  	require.Equal(t, []string{"hello", "hello"}, []string{m1, m2})
    53  }
    54  
    55  func TestConsoleShouldUseTextForStr(t *testing.T) {
    56  	BeforeEach(t)
    57  	defer AfterEach(t)
    58  	messages := make(chan playwright.ConsoleMessage, 1)
    59  	page.On("console", func(message playwright.ConsoleMessage) {
    60  		messages <- message
    61  	})
    62  	_, err := page.Evaluate(`() => console.log("Hello world")`)
    63  	require.NoError(t, err)
    64  	message := <-messages
    65  	require.Equal(t, "Hello world", message.String())
    66  }
    67  
    68  func TestConsoleShouldWorkForDifferentConsoleAPICalls(t *testing.T) {
    69  	BeforeEach(t)
    70  	defer AfterEach(t)
    71  	messagesChan := make(chan playwright.ConsoleMessage, 6)
    72  	page.On("console", func(message playwright.ConsoleMessage) {
    73  		messagesChan <- message
    74  	})
    75  	// All console events will be reported before 'page.evaluate' is finished.
    76  	_, err := page.Evaluate(
    77  		`() => {
    78        // A pair of time/timeEnd generates only one Console API call.
    79        console.time('calling console.time');
    80        console.timeEnd('calling console.time');
    81        console.trace('calling console.trace');
    82        console.dir('calling console.dir');
    83        console.warn('calling console.warn');
    84        console.error('calling console.error');
    85        console.log(Promise.resolve('should not wait until resolved!'));
    86  	}`)
    87  	messages := ChanToSlice(messagesChan, 6).([]playwright.ConsoleMessage)
    88  	require.NoError(t, err)
    89  	require.Equal(t, []interface{}{
    90  		"timeEnd",
    91  		"trace",
    92  		"dir",
    93  		"warning",
    94  		"error",
    95  		"log",
    96  	}, Map(messages, func(msg interface{}) interface{} {
    97  		return msg.(playwright.ConsoleMessage).Type()
    98  	}))
    99  
   100  	require.Contains(t, messages[0].Text(), "calling console.time")
   101  	require.Equal(t, []interface{}{
   102  		"calling console.trace",
   103  		"calling console.dir",
   104  		"calling console.warn",
   105  		"calling console.error",
   106  		"Promise",
   107  	}, Map(messages[1:], func(msg interface{}) interface{} {
   108  		return msg.(playwright.ConsoleMessage).Text()
   109  	}))
   110  }
   111  
   112  func TestConsoleShouldNotFailForWindowObjects(t *testing.T) {
   113  	BeforeEach(t)
   114  	defer AfterEach(t)
   115  	messages := make(chan playwright.ConsoleMessage, 1)
   116  	page.Once("console", func(message playwright.ConsoleMessage) {
   117  		messages <- message
   118  	})
   119  	_, err := page.Evaluate("() => console.error(window)")
   120  	require.NoError(t, err)
   121  	message := <-messages
   122  	if !isFirefox {
   123  		require.Equal(t, "Window", message.Text())
   124  	} else {
   125  		require.Equal(t, "JSHandle@object", message.Text())
   126  	}
   127  }
   128  
   129  func TestConsoleShouldTriggerCorrectLog(t *testing.T) {
   130  	BeforeEach(t)
   131  	defer AfterEach(t)
   132  	messages := make(chan playwright.ConsoleMessage, 1)
   133  	page.Once("console", func(message playwright.ConsoleMessage) {
   134  		messages <- message
   135  	})
   136  	_, err := page.Goto("about:blank")
   137  	require.NoError(t, err)
   138  	_, err = page.Evaluate("url => fetch(url).catch(e => {})", server.EMPTY_PAGE)
   139  	require.NoError(t, err)
   140  	message := <-messages
   141  	require.Contains(t, message.Text(), "Access-Control-Allow-Origin")
   142  	require.Equal(t, "error", message.Type())
   143  }
   144  
   145  func TestConsoleShouldHaveLocation(t *testing.T) {
   146  	BeforeEach(t)
   147  	defer AfterEach(t)
   148  	messageEvent, err := page.ExpectEvent("console", func() error {
   149  		_, err := page.Goto(server.PREFIX + "/consolelog.html")
   150  		return err
   151  	}, func(m playwright.ConsoleMessage) bool {
   152  		return m.Text() == "yellow"
   153  	})
   154  	require.NoError(t, err)
   155  	message := messageEvent.(playwright.ConsoleMessage)
   156  	require.Equal(t, message.Type(), "log")
   157  	require.Equal(t, server.PREFIX+"/consolelog.html", message.Location().URL)
   158  	require.Equal(t, 7, message.Location().LineNumber)
   159  }
   160  

View as plain text