chromedp completely fails to reliably click on links when running in non-headless mode on Windows. About 50% of the time it just hangs thinking it clicked when it didn't. So, on Windows need headless only, and then design tests on Linux where it (maybe) works.

This commit is contained in:
Zed A. Shaw 2025-06-23 13:08:25 -04:00
parent bac4472c3a
commit fecfc8ee84
3 changed files with 83 additions and 61 deletions

View file

@ -1,59 +0,0 @@
package tests
import (
"testing"
"context"
"log"
"time"
"github.com/stretchr/testify/assert"
browser "github.com/chromedp/chromedp"
)
func Run(assert *assert.Assertions, ctx context.Context, actions ...browser.Action) {
err := browser.Run(ctx, actions...)
assert.NoError(err)
}
func Setup(timeout time.Duration) (context.Context, context.CancelFunc) {
opts := append(browser.DefaultExecAllocatorOptions[:],
browser.Flag("headless", false),)
allocCtx, _ := browser.NewExecAllocator(context.Background(), opts...)
ctx, _ := browser.NewContext(allocCtx, browser.WithLogf(log.Printf))
return context.WithTimeout(ctx, timeout * time.Second)
}
func TestLogin(t *testing.T) {
assert := assert.New(t)
ctx, cancel := Setup(5); defer cancel()
Run(assert, ctx,
browser.Navigate(`http://127.0.0.1:5002/login/`),
browser.WaitVisible(`body > footer`),
browser.WaitVisible(`[data-testid="login-page"]`),
browser.SendKeys(`#username`, `zedshaw`),
browser.SendKeys(`#password`, `1234`),
browser.Click(`#login-submit`, browser.NodeVisible),
browser.WaitVisible(`body > footer`),
browser.WaitVisible(`[data-testid="home-page"]`))
}
func TestStreamPage(t *testing.T) {
assert := assert.New(t)
ctx, cancel := Setup(20); defer cancel()
var example string
Run(assert, ctx,
browser.Navigate(`http://127.0.0.1:5002`),
browser.WaitVisible(`body > footer`),
browser.Click(`#streams`, browser.NodeVisible),
browser.Text(`#streams-title`, &example))
assert.Equal(example, "Past Streams")
}

74
tests/base_test.go Normal file
View file

@ -0,0 +1,74 @@
package tests
import (
"testing"
"context"
"log"
"time"
"github.com/stretchr/testify/assert"
browser "github.com/chromedp/chromedp"
)
func Run(assert *assert.Assertions, ctx context.Context, actions ...browser.Action) {
err := browser.Run(ctx, actions...)
assert.NoError(err)
}
func Setup(timeout time.Duration) (context.Context, context.CancelFunc) {
opts := append(browser.DefaultExecAllocatorOptions[:],
browser.Flag("headless", true),)
ctx, cancel := browser.NewExecAllocator(context.Background(), opts...)
ctx, _ = browser.NewContext(ctx, browser.WithLogf(log.Printf))
ctx, _ = context.WithTimeout(ctx, timeout * time.Second)
return ctx, cancel
}
/*
func TestLogin(t *testing.T) {
assert := assert.New(t)
ctx, cancel := Setup(5); defer cancel()
Run(assert, ctx,
browser.Navigate(`http://127.0.0.1:5002/login/`),
browser.WaitVisible(`body > footer`),
browser.WaitVisible(`[data-testid="login-page"]`),
browser.SendKeys(`#username`, `zedshaw`),
browser.SendKeys(`#password`, `1234`),
browser.Click(`#login-submit`, browser.NodeVisible),
browser.WaitVisible(`body > footer`),
browser.WaitVisible(`[data-testid="home-page"]`))
}
*/
func TestStreamPage(t *testing.T) {
assert := assert.New(t)
ctx, cancel := Setup(2);
defer cancel();
var example string
err := browser.Run(ctx,
browser.Navigate(`http://127.0.0.1:5002`),
browser.WaitVisible(`body > footer`),
browser.WaitVisible(`#streams`),
)
assert.NoError(err)
resp, err := browser.RunResponse(ctx, browser.Click(`#streams`, browser.ByID))
assert.Equal(resp.Status, int64(200))
assert.NoError(err)
err = browser.Run(ctx, browser.WaitVisible(`#streams-title`))
assert.NoError(err)
err = browser.Run(ctx, browser.Text(`#streams-title`, &example))
assert.NoError(err)
assert.Equal(example, "Past Streams")
}