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