1 package playwright_test
2
3 import (
4 "io/ioutil"
5 "testing"
6
7 "github.com/playwright-community/playwright-go"
8 "github.com/stretchr/testify/require"
9 )
10
11 func TestFileChooser(t *testing.T) {
12 BeforeEach(t)
13 defer AfterEach(t)
14 _, err := page.Goto(server.PREFIX + "/input/fileupload.html")
15 require.NoError(t, err)
16 input, err := page.QuerySelector("input")
17 require.NoError(t, err)
18 file, err := ioutil.ReadFile(Asset("file-to-upload.txt"))
19 require.NoError(t, err)
20 require.NoError(t, input.SetInputFiles([]playwright.InputFile{
21 {
22 Name: "file-to-upload.txt",
23 MimeType: "text/plain",
24 Buffer: file,
25 },
26 }))
27 fileName, err := page.Evaluate("e => e.files[0].name", input)
28 require.NoError(t, err)
29 require.Equal(t, "file-to-upload.txt", fileName)
30 content, err := page.Evaluate(`e => {
31 reader = new FileReader()
32 promise = new Promise(fulfill => reader.onload = fulfill)
33 reader.readAsText(e.files[0])
34 return promise.then(() => reader.result)
35 }`, input)
36 require.NoError(t, err)
37 require.Equal(t, "contents of the file", content)
38 }
39
40 func TestFileChooserShouldEmitEvent(t *testing.T) {
41 BeforeEach(t)
42 defer AfterEach(t)
43 _, err := page.Goto(server.EMPTY_PAGE)
44 require.NoError(t, err)
45 require.NoError(t, page.SetContent("<input type=file>"))
46
47 fileChooser, err := page.ExpectFileChooser(func() error {
48 return page.Click("input")
49 })
50 require.NoError(t, err)
51 require.False(t, fileChooser.IsMultiple())
52 require.Equal(t, page, fileChooser.Page())
53 elementHTML, err := fileChooser.Element().InnerHTML()
54 require.NoError(t, err)
55
56 inputElement, err := page.QuerySelector("input")
57 require.NoError(t, err)
58 inputElementHTML, err := inputElement.InnerHTML()
59 require.NoError(t, err)
60
61 require.Equal(t, elementHTML, inputElementHTML)
62
63 require.NoError(t, fileChooser.SetFiles([]playwright.InputFile{
64 {
65 Name: "file-to-upload.txt",
66 MimeType: "text/plain",
67 Buffer: []byte("123"),
68 },
69 }))
70 fileName, err := page.Evaluate("e => e.files[0].name", inputElement)
71 require.NoError(t, err)
72 require.Equal(t, "file-to-upload.txt", fileName)
73 }
74
View as plain text