github.com/web-platform-tests/wpt.fyi@v0.0.0-20240530210107-70cf978996f1/webdriver/builder_test.go (about) 1 // +build large 2 3 // Copyright 2019 The WPT Dashboard Project. All rights reserved. 4 // Use of this source code is governed by a BSD-style license that can be 5 // found in the LICENSE file. 6 7 package webdriver 8 9 import ( 10 "fmt" 11 "testing" 12 13 mapset "github.com/deckarep/golang-set" 14 "github.com/stretchr/testify/assert" 15 "github.com/tebeka/selenium" 16 "github.com/web-platform-tests/wpt.fyi/shared" 17 ) 18 19 func TestQueryBuilder_MasterCheckedForMasterLabelQuery(t *testing.T) { 20 runWebdriverTest(t, func(t *testing.T, app AppServer, wd selenium.WebDriver) { 21 // Navigate to the wpt.fyi homepage. 22 filters := shared.TestRunFilter{ 23 Labels: mapset.NewSetWith(shared.MasterLabel), 24 } 25 url := fmt.Sprintf("/results/?%s", filters.ToQuery().Encode()) 26 var err error 27 if err = wd.Get(app.GetWebappURL(url)); err != nil { 28 assert.FailNow(t, fmt.Sprintf("Failed to load %s: %s", url, err.Error())) 29 } 30 31 // Wait for the results view to load. 32 var e selenium.WebElement 33 loaded := func(wd selenium.WebDriver) (bool, error) { 34 e, err = wd.FindElement(selenium.ByTagName, "wpt-app") 35 if err != nil { 36 return false, err 37 } 38 return e != nil, nil 39 } 40 if err := wd.WaitWithTimeout(loaded, LongTimeout); err != nil { 41 assert.FailNow(t, fmt.Sprintf("Error waiting for test runs: %s", err.Error())) 42 } 43 44 // Expand the builder 45 wd.ExecuteScript("arguments[0].editingQuery = true", []interface{}{e}) 46 if err != nil { 47 assert.FailNow(t, fmt.Sprintf("Failed to expand builder: %s", err.Error())) 48 } 49 var cb selenium.WebElement 50 expanded := func(wd selenium.WebDriver) (bool, error) { 51 cb, err = FindShadowElement(wd, e, "test-runs-query-builder", "#master-checkbox") 52 if err != nil { 53 return false, err 54 } 55 return cb != nil, nil 56 } 57 if err := wd.WaitWithTimeout(expanded, LongTimeout); err != nil { 58 assert.FailNow(t, fmt.Sprintf("Error waiting for builder to expand: %s", err.Error())) 59 } 60 // NOTE: 'checked' is a property on the class, but not an attr in the HTML. 61 var checked interface{} 62 checked, err = wd.ExecuteScript("return arguments[0].checked", []interface{}{cb}) 63 if err != nil { 64 assert.FailNow(t, fmt.Sprintf("Failed to get checkbox 'checked' attr: %s", err.Error())) 65 } 66 isChecked, _ := checked.(bool) 67 assert.True(t, isChecked) 68 }) 69 }