github.com/web-platform-tests/wpt.fyi@v0.0.0-20240530210107-70cf978996f1/webdriver/label_test.go (about)

     1  // +build large
     2  
     3  package webdriver
     4  
     5  import (
     6  	"fmt"
     7  	"testing"
     8  
     9  	mapset "github.com/deckarep/golang-set"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  	"github.com/tebeka/selenium"
    13  	"github.com/web-platform-tests/wpt.fyi/shared"
    14  )
    15  
    16  func TestLabelParam_Results(t *testing.T) {
    17  	runWebdriverTest(t, func(t *testing.T, app AppServer, wd selenium.WebDriver) {
    18  		aligned := false
    19  		testLabel(t, wd, app, "/", "experimental", "wpt-results", 4, aligned)
    20  	})
    21  
    22  }
    23  
    24  func testLabel(
    25  	t *testing.T,
    26  	wd selenium.WebDriver,
    27  	app AppServer,
    28  	path, label, elementName string,
    29  	runs int,
    30  	aligned bool) {
    31  	// Navigate to the wpt.fyi homepage.
    32  	filters := shared.TestRunFilter{
    33  		Labels:  mapset.NewSetWith(label),
    34  		Aligned: &aligned,
    35  	}
    36  	url := fmt.Sprintf("%s?%s", path, filters.ToQuery().Encode())
    37  	if err := wd.Get(app.GetWebappURL(url)); err != nil {
    38  		assert.FailNow(t, fmt.Sprintf("Failed to load %s: %s", url, err.Error()))
    39  	}
    40  
    41  	// Wait for the results view to load.
    42  	runsLoadedCondition := func(wd selenium.WebDriver) (bool, error) {
    43  		testRuns, err := getTestRunElements(wd, elementName)
    44  		if err != nil {
    45  			return false, err
    46  		}
    47  		return len(testRuns) > 0, nil
    48  	}
    49  	if err := wd.WaitWithTimeout(runsLoadedCondition, LongTimeout); err != nil {
    50  		assert.FailNow(t, fmt.Sprintf("Error waiting for test runs: %s", err.Error()))
    51  	}
    52  
    53  	// Check loaded test runs
    54  	testRuns, err := getTestRunElements(wd, elementName)
    55  	if err != nil {
    56  		assert.FailNow(t, fmt.Sprintf("Failed to get test runs: %s", err.Error()))
    57  	}
    58  	assert.Lenf(t, testRuns, runs, "Expected exactly %v TestRuns search result.", runs)
    59  	if aligned {
    60  		assertAligned(t, wd, testRuns)
    61  	}
    62  }
    63  
    64  func assertAligned(t *testing.T, wd selenium.WebDriver, testRuns []selenium.WebElement) {
    65  	if len(testRuns) < 2 {
    66  		return
    67  	}
    68  	args := []interface{}{testRuns[0]}
    69  	shaProp := "return arguments[0].testRun.revision"
    70  	sha, _ := wd.ExecuteScriptRaw(shaProp, args)
    71  	assert.NotEqual(t, sha, "")
    72  	for i := 1; i < len(testRuns); i++ {
    73  		args = []interface{}{testRuns[0]}
    74  		otherSHA, _ := wd.ExecuteScriptRaw(shaProp, args)
    75  		assert.Equal(t, sha, otherSHA)
    76  	}
    77  }