...

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

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

     1  package playwright_test
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"testing"
     7  	"time"
     8  
     9  	"github.com/playwright-community/playwright-go"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func TestBrowserTypeBrowserName(t *testing.T) {
    14  	BeforeEach(t)
    15  	defer AfterEach(t)
    16  	require.Equal(t, pw.Chromium.Name(), "chromium")
    17  	require.Equal(t, pw.Firefox.Name(), "firefox")
    18  	require.Equal(t, pw.WebKit.Name(), "webkit")
    19  }
    20  
    21  func TestBrowserTypeExecutablePath(t *testing.T) {
    22  	BeforeEach(t)
    23  	defer AfterEach(t)
    24  	require.Greater(t, len(pw.Chromium.ExecutablePath()), 0)
    25  }
    26  
    27  func TestBrowserTypeLaunchPersistentContext(t *testing.T) {
    28  	BeforeEach(t)
    29  	defer AfterEach(t)
    30  	user_data_dir1 := t.TempDir()
    31  	browser_context, err := browserType.LaunchPersistentContext(user_data_dir1)
    32  	require.NoError(t, err)
    33  	page, err := browser_context.NewPage()
    34  	require.NoError(t, err)
    35  	_, err = page.Goto(server.EMPTY_PAGE)
    36  	require.NoError(t, err)
    37  	_, err = page.Evaluate("() => localStorage.hey = 'hello'")
    38  	require.NoError(t, err)
    39  	require.NoError(t, browser_context.Close())
    40  
    41  	browser_context2, err := browserType.LaunchPersistentContext(user_data_dir1)
    42  	require.NoError(t, err)
    43  	page2, err := browser_context2.NewPage()
    44  	require.NoError(t, err)
    45  	_, err = page2.Goto(server.EMPTY_PAGE)
    46  	require.NoError(t, err)
    47  	result, err := page2.Evaluate("() => localStorage.hey")
    48  	require.NoError(t, err)
    49  	require.Equal(t, "hello", result)
    50  	require.NoError(t, browser_context2.Close())
    51  
    52  	user_data_dir2 := t.TempDir()
    53  	browser_context3, err := browserType.LaunchPersistentContext(user_data_dir2)
    54  	require.NoError(t, err)
    55  	page3, err := browser_context3.NewPage()
    56  	require.NoError(t, err)
    57  	_, err = page3.Goto(server.EMPTY_PAGE)
    58  	require.NoError(t, err)
    59  	result, err = page3.Evaluate("() => localStorage.hey")
    60  	require.NoError(t, err)
    61  	require.NotEqual(t, "hello", result)
    62  	require.NoError(t, browser_context3.Close())
    63  }
    64  
    65  func TestBrowserTypeConnect(t *testing.T) {
    66  	BeforeEach(t)
    67  	defer AfterEach(t)
    68  	remoteServer, err := newRemoteServer()
    69  	require.NoError(t, err)
    70  	defer remoteServer.Close()
    71  	browser, err := browserType.Connect(remoteServer.url)
    72  	require.NoError(t, err)
    73  	require.NotNil(t, browser)
    74  	browser_context, err := browser.NewContext()
    75  	require.NoError(t, err)
    76  	page, err := browser_context.NewPage()
    77  	require.NoError(t, err)
    78  	result, err := page.Evaluate("11 * 11")
    79  	require.NoError(t, err)
    80  	require.Equal(t, result, 121)
    81  	require.NoError(t, browser.Close())
    82  }
    83  
    84  func TestBrowserTypeConnectShouldBeAbleToReconnectToBrowser(t *testing.T) {
    85  	BeforeEach(t)
    86  	defer AfterEach(t)
    87  	remoteServer, err := newRemoteServer()
    88  	require.NoError(t, err)
    89  	defer remoteServer.Close()
    90  	browser, err := browserType.Connect(remoteServer.url)
    91  	require.NoError(t, err)
    92  	require.NotNil(t, browser)
    93  	require.Len(t, browser.Contexts(), 0)
    94  	browser_context, err := browser.NewContext()
    95  	require.NoError(t, err)
    96  	require.Len(t, browser.Contexts(), 1)
    97  	require.Len(t, browser_context.Pages(), 0)
    98  	page, err := browser_context.NewPage()
    99  	require.Len(t, browser_context.Pages(), 1)
   100  	require.NoError(t, err)
   101  	result, err := page.Evaluate("11 * 11")
   102  	require.NoError(t, err)
   103  	require.Equal(t, result, 121)
   104  	require.NoError(t, browser.Close())
   105  
   106  	browser, err = browserType.Connect(remoteServer.url)
   107  	require.NoError(t, err)
   108  	require.NotNil(t, browser)
   109  	require.Len(t, browser.Contexts(), 0)
   110  	browser_context, err = browser.NewContext()
   111  	require.NoError(t, err)
   112  	require.Len(t, browser.Contexts(), 1)
   113  	require.Len(t, browser_context.Pages(), 0)
   114  	page, err = browser_context.NewPage()
   115  	require.Len(t, browser_context.Pages(), 1)
   116  	require.NoError(t, err)
   117  	result, err = page.Evaluate("11 * 11")
   118  	require.NoError(t, err)
   119  	require.Equal(t, result, 121)
   120  	require.NoError(t, browser.Close())
   121  }
   122  
   123  func TestBrowserTypeConnectShouldEmitDisconnectedEvent(t *testing.T) {
   124  	BeforeEach(t)
   125  	defer AfterEach(t)
   126  	remoteServer, err := newRemoteServer()
   127  	require.NoError(t, err)
   128  	disconnected1 := newSyncSlice()
   129  	disconnected2 := newSyncSlice()
   130  	browser1, err := browserType.Connect(remoteServer.url)
   131  	require.NoError(t, err)
   132  	require.NotNil(t, browser1)
   133  	browser2, err := browserType.Connect(remoteServer.url)
   134  	require.NoError(t, err)
   135  	require.NotNil(t, browser2)
   136  	browser1.On("disconnected", func() {
   137  		disconnected1.Append(true)
   138  	})
   139  	browser2.On("disconnected", func() {
   140  		disconnected2.Append(true)
   141  	})
   142  	page, err := browser2.NewPage()
   143  	require.NoError(t, err)
   144  	require.NoError(t, browser1.Close())
   145  	require.False(t, browser1.IsConnected())
   146  	require.Len(t, disconnected1.Get(), 1)
   147  	require.Len(t, disconnected2.Get(), 0)
   148  	remoteServer.Close()
   149  
   150  	_, err = page.Title()
   151  	require.Error(t, err)
   152  	require.False(t, browser2.IsConnected())
   153  	require.Len(t, disconnected2.Get(), 1)
   154  }
   155  
   156  func TestBrowserTypeConnectSlowMo(t *testing.T) {
   157  	BeforeEach(t)
   158  	defer AfterEach(t)
   159  	remoteServer, err := newRemoteServer()
   160  	require.NoError(t, err)
   161  	defer remoteServer.Close()
   162  	browser, err := browserType.Connect(remoteServer.url, playwright.BrowserTypeConnectOptions{
   163  		SlowMo: playwright.Float(100),
   164  	})
   165  	require.NoError(t, err)
   166  	require.NotNil(t, browser)
   167  	browser_context, err := browser.NewContext()
   168  	require.NoError(t, err)
   169  	t1 := time.Now()
   170  	page, err := browser_context.NewPage()
   171  	require.NoError(t, err)
   172  	result, err := page.Evaluate("11 * 11")
   173  	require.NoError(t, err)
   174  	require.Equal(t, result, 121)
   175  	require.GreaterOrEqual(t, time.Since(t1), time.Duration(time.Millisecond*200))
   176  	require.NoError(t, browser.Close())
   177  }
   178  
   179  func TestBrowserTypeConnectArtifactPath(t *testing.T) {
   180  	BeforeEach(t)
   181  	defer AfterEach(t)
   182  	remoteServer, err := newRemoteServer()
   183  	require.NoError(t, err)
   184  	defer remoteServer.Close()
   185  	browser, err := browserType.Connect(remoteServer.url)
   186  	require.NoError(t, err)
   187  	require.NotNil(t, browser)
   188  	defer browser.Close()
   189  	recordVideoDir := t.TempDir()
   190  	browserContext, err := browser.NewContext(playwright.BrowserNewContextOptions{
   191  		RecordVideo: &playwright.BrowserNewContextOptionsRecordVideo{
   192  			Dir: &recordVideoDir,
   193  		},
   194  	})
   195  	require.NoError(t, err)
   196  	require.NotNil(t, browserContext)
   197  	defer browserContext.Close()
   198  	page, err := browserContext.NewPage()
   199  	require.NoError(t, err)
   200  	defer page.Close()
   201  	_, err = page.Goto(server.EMPTY_PAGE)
   202  	require.NoError(t, err)
   203  	_, err = page.Video().Path()
   204  	require.Error(t, err)
   205  	require.Equal(t, err, errors.New("Path is not available when connecting remotely. Use SaveAs() to save a local copy."))
   206  }
   207  func TestBrowserTypeConnectOverCDP(t *testing.T) {
   208  	if !isChromium {
   209  		t.Skip("CDP is only supported on Chromium")
   210  	}
   211  	BeforeEach(t)
   212  	defer AfterEach(t)
   213  	port, err := getFreePort()
   214  	require.NoError(t, err)
   215  	browserServer, err := browserType.Launch(playwright.BrowserTypeLaunchOptions{
   216  		Args: []string{fmt.Sprintf("--remote-debugging-port=%d", port)},
   217  	})
   218  	require.NoError(t, err)
   219  	defer browserServer.Close()
   220  	browser, err := browserType.ConnectOverCDP(fmt.Sprintf("http://localhost:%d", port))
   221  	require.NoError(t, err)
   222  	require.NotNil(t, browser)
   223  	defer browser.Close()
   224  	require.Len(t, browser.Contexts(), 1)
   225  }
   226  
   227  func TestBrowserTypeConnectOverCDPTwice(t *testing.T) {
   228  	if !isChromium {
   229  		t.Skip("CDP is only supported on Chromium")
   230  	}
   231  	BeforeEach(t)
   232  	defer AfterEach(t)
   233  	port, err := getFreePort()
   234  	require.NoError(t, err)
   235  	browserServer, err := browserType.Launch(playwright.BrowserTypeLaunchOptions{
   236  		Args: []string{fmt.Sprintf("--remote-debugging-port=%d", port)},
   237  	})
   238  	require.NoError(t, err)
   239  	defer browserServer.Close()
   240  	browser1, err := browserType.ConnectOverCDP(fmt.Sprintf("http://localhost:%d", port))
   241  	require.NoError(t, err)
   242  	require.NotNil(t, browser1)
   243  	browser2, err := browserType.ConnectOverCDP(fmt.Sprintf("http://localhost:%d", port))
   244  	require.NoError(t, err)
   245  	require.NotNil(t, browser2)
   246  	defer browser1.Close()
   247  	defer browser2.Close()
   248  	require.Len(t, browser1.Contexts(), 1)
   249  	page1, err := browser1.Contexts()[0].NewPage()
   250  	require.NoError(t, err)
   251  	_, err = page1.Goto(server.EMPTY_PAGE)
   252  	require.NoError(t, err)
   253  	require.Len(t, browser2.Contexts(), 1)
   254  	page2, err := browser2.Contexts()[0].NewPage()
   255  	require.NoError(t, err)
   256  	_, err = page2.Goto(server.EMPTY_PAGE)
   257  	require.NoError(t, err)
   258  
   259  	require.Len(t, browser1.Contexts()[0].Pages(), 2)
   260  	require.Len(t, browser2.Contexts()[0].Pages(), 2)
   261  
   262  }
   263  

View as plain text