...

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

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

     1  package playwright_test
     2  
     3  import (
     4  	"encoding/json"
     5  	"io/ioutil"
     6  	"os"
     7  	"testing"
     8  
     9  	"github.com/playwright-community/playwright-go"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func TestBrowserContextStorageStateShouldCaptureLocalStorage(t *testing.T) {
    14  	BeforeEach(t)
    15  	defer AfterEach(t)
    16  	page1, err := context.NewPage()
    17  	require.NoError(t, err)
    18  	require.NoError(t, page1.Route("**/*", func(route playwright.Route, request playwright.Request) {
    19  		require.NoError(t, route.Fulfill(playwright.RouteFulfillOptions{
    20  			Body: "<html></html>",
    21  		}))
    22  	}))
    23  	_, err = page1.Goto("https://www.example.com")
    24  	require.NoError(t, err)
    25  	_, err = page1.Evaluate("localStorage['name1'] = 'value1'")
    26  	require.NoError(t, err)
    27  	_, err = page1.Goto("https://www.domain.com")
    28  	require.NoError(t, err)
    29  	_, err = page1.Evaluate("localStorage['name2'] = 'value2'")
    30  	require.NoError(t, err)
    31  
    32  	state, err := context.StorageState()
    33  	require.NoError(t, err)
    34  	origins := state.Origins
    35  	require.Equal(t, 2, len(origins))
    36  	require.Equal(t, origins[0], playwright.OriginsState{
    37  		Origin: "https://www.example.com",
    38  		LocalStorage: []playwright.LocalStorageEntry{
    39  			{
    40  				Name:  "name1",
    41  				Value: "value1",
    42  			},
    43  		},
    44  	})
    45  	require.Equal(t, origins[1], playwright.OriginsState{
    46  		Origin: "https://www.domain.com",
    47  		LocalStorage: []playwright.LocalStorageEntry{
    48  			{
    49  				Name:  "name2",
    50  				Value: "value2",
    51  			},
    52  		},
    53  	})
    54  }
    55  
    56  func TestBrowserContextStorageStateSetLocalStorage(t *testing.T) {
    57  	BeforeEach(t)
    58  	defer AfterEach(t)
    59  	context, err := browser.NewContext(
    60  		playwright.BrowserNewContextOptions{
    61  			StorageState: &playwright.BrowserNewContextOptionsStorageState{
    62  				Origins: []playwright.BrowserNewContextOptionsStorageStateOrigins{{
    63  					Origin: playwright.String("https://www.example.com"),
    64  					LocalStorage: []playwright.BrowserNewContextOptionsStorageStateOriginsLocalStorage{
    65  						{
    66  							Name:  playwright.String("name1"),
    67  							Value: playwright.String("value1"),
    68  						},
    69  					},
    70  				},
    71  				},
    72  			},
    73  		},
    74  	)
    75  	require.NoError(t, err)
    76  	defer context.Close()
    77  	page, err := context.NewPage()
    78  	require.NoError(t, err)
    79  	defer page.Close()
    80  	require.NoError(t, page.Route("**/*", func(route playwright.Route, request playwright.Request) {
    81  
    82  		require.NoError(t, route.Fulfill(playwright.RouteFulfillOptions{
    83  			Body: "<html></html>",
    84  		}))
    85  	}))
    86  	_, err = page.Goto("https://www.example.com")
    87  	require.NoError(t, err)
    88  	localStorage, err := page.Evaluate("window.localStorage")
    89  	require.NoError(t, err)
    90  	require.Equal(t, map[string]interface{}{"name1": "value1"}, localStorage)
    91  }
    92  
    93  func TestBrowserContextStorageStateRoundTripThroughTheFile(t *testing.T) {
    94  	BeforeEach(t)
    95  	defer AfterEach(t)
    96  	page1, err := context.NewPage()
    97  	require.NoError(t, err)
    98  	defer page1.Close()
    99  	require.NoError(t, page1.Route("**/*", func(route playwright.Route, request playwright.Request) {
   100  		require.NoError(t, route.Fulfill(playwright.RouteFulfillOptions{
   101  			Body: "<html></html>",
   102  		}))
   103  	}))
   104  	_, err = page1.Goto("https://www.example.com")
   105  	require.NoError(t, err)
   106  	_, err = page1.Evaluate(`
   107  	() => {
   108  		localStorage["name1"] = "value1"
   109  		document.cookie = "username=John Doe"
   110  		return document.cookie
   111  	}
   112  	`)
   113  	require.NoError(t, err)
   114  	tempfile, err := ioutil.TempFile(os.TempDir(), "storage-state*.json")
   115  	require.NoError(t, err)
   116  	state, err := context.StorageState(tempfile.Name())
   117  	require.NoError(t, err)
   118  	stateWritten, err := ioutil.ReadFile(tempfile.Name())
   119  	require.NoError(t, err)
   120  	var storageState *playwright.StorageState
   121  	err = json.Unmarshal(stateWritten, &storageState)
   122  	require.NoError(t, err)
   123  	require.Equal(t, state, storageState)
   124  
   125  	context2, err := browser.NewContext(
   126  		playwright.BrowserNewContextOptions{
   127  			StorageStatePath: playwright.String(tempfile.Name()),
   128  		})
   129  	require.NoError(t, err)
   130  	defer context2.Close()
   131  	page2, err := context2.NewPage()
   132  	require.NoError(t, err)
   133  	defer page2.Close()
   134  	require.NoError(t, page2.Route("**/*", func(route playwright.Route, request playwright.Request) {
   135  		require.NoError(t, route.Fulfill(playwright.RouteFulfillOptions{
   136  			Body: "<html></html>",
   137  		}))
   138  	}))
   139  	_, err = page2.Goto("https://www.example.com")
   140  	require.NoError(t, err)
   141  	cookie, err := page2.Evaluate("document.cookie")
   142  	require.NoError(t, err)
   143  	require.Equal(t, "username=John Doe", cookie)
   144  	localStorage, err := page2.Evaluate("window.localStorage")
   145  	require.NoError(t, err)
   146  	require.Equal(t, map[string]interface{}{"name1": "value1"}, localStorage)
   147  }
   148  

View as plain text