github.com/bazelbuild/rules_webtesting@v0.2.0/go/wtl/proxy/driverhub/quithandler/quit_handler_test.go (about) 1 // Copyright 2017 Google Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package quithandler 16 17 import ( 18 "fmt" 19 "log" 20 "net/http" 21 "os" 22 "testing" 23 "time" 24 25 "github.com/bazelbuild/rules_webtesting/go/bazel" 26 "github.com/bazelbuild/rules_webtesting/go/portpicker" 27 "github.com/bazelbuild/rules_webtesting/go/webtest" 28 "github.com/tebeka/selenium" 29 ) 30 31 var testpage = "" 32 33 func TestMain(m *testing.M) { 34 port, err := portpicker.PickUnusedPort() 35 if err != nil { 36 log.Fatal(err) 37 } 38 39 dir, err := bazel.Runfile("testdata/") 40 if err != nil { 41 log.Fatal(err) 42 } 43 44 go func() { 45 log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", port), http.FileServer(http.Dir(dir)))) 46 }() 47 48 testpage = fmt.Sprintf("http://localhost:%d/testpage.html", port) 49 50 os.Exit(m.Run()) 51 } 52 53 func TestCloseOneWindow(t *testing.T) { 54 driver, err := webtest.NewWebDriverSession(selenium.Capabilities{}) 55 if err != nil { 56 t.Fatal(err) 57 } 58 59 defer driver.Quit() 60 61 if err := driver.Get(testpage); err != nil { 62 t.Fatal(err) 63 } 64 65 if err := driver.CloseWindow(""); err != nil { 66 t.Fatal(err) 67 } 68 69 if _, err := driver.WindowHandles(); err == nil { 70 t.Fatal("got nil, expected invalid session error") 71 } 72 } 73 74 func TestQuit(t *testing.T) { 75 driver, err := webtest.NewWebDriverSession(selenium.Capabilities{}) 76 if err != nil { 77 t.Fatal(err) 78 } 79 80 defer driver.Quit() 81 82 if err := driver.Get(testpage); err != nil { 83 t.Fatal(err) 84 } 85 86 button, err := driver.FindElement("tag name", "input") 87 if err != nil { 88 t.Fatal(err) 89 } 90 91 if err := button.Click(); err != nil { 92 t.Fatal(err) 93 } 94 95 if err := driver.Quit(); err != nil { 96 t.Fatal(err) 97 } 98 99 if _, err := driver.WindowHandles(); err == nil { 100 t.Fatal("got nil, expected invalid session error") 101 } 102 } 103 104 func TestCloseTwoWindows(t *testing.T) { 105 driver, err := webtest.NewWebDriverSession(selenium.Capabilities{}) 106 if err != nil { 107 t.Fatal(err) 108 } 109 110 defer driver.Quit() 111 112 if err := driver.Get(testpage); err != nil { 113 t.Fatal(err) 114 } 115 116 button, err := driver.FindElement("tag name", "input") 117 if err != nil { 118 t.Fatal(err) 119 } 120 121 if err := button.Click(); err != nil { 122 t.Fatal(err) 123 } 124 125 for i := 0; i < 3; i++ { 126 handles, err := driver.WindowHandles() 127 if err != nil { 128 t.Fatal(err) 129 } 130 if len(handles) == 2 { 131 break 132 } 133 time.Sleep(100 * time.Millisecond) 134 } 135 136 if err := driver.CloseWindow(""); err != nil { 137 t.Fatal(err) 138 } 139 140 handles, err := driver.WindowHandles() 141 if err != nil { 142 t.Fatal(err) 143 } 144 145 if len(handles) != 1 { 146 t.Fatalf("Got %d handles, expected 1", len(handles)) 147 } 148 149 if err := driver.SwitchWindow(handles[0]); err != nil { 150 t.Fatal(err) 151 } 152 153 if err := driver.CloseWindow(""); err != nil { 154 t.Fatal(err) 155 } 156 157 if _, err := driver.WindowHandles(); err == nil { 158 t.Fatal("got nil, expected invalid session error") 159 } 160 }