97e80a00d5
This way, the simple examples and tests don't need to do that separately. Practically all users will want this cleanup work to be synchronous, and practically all Go APIs are synchronous by default, so this makes chromedp easier to use.
100 lines
2.1 KiB
Go
100 lines
2.1 KiB
Go
package chromedp_test
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/chromedp/chromedp"
|
|
)
|
|
|
|
func ExampleTitle() {
|
|
ctx, cancel := chromedp.NewContext(context.Background())
|
|
defer cancel()
|
|
|
|
var title string
|
|
if err := chromedp.Run(ctx,
|
|
chromedp.Navigate("https://github.com/chromedp/chromedp/issues"),
|
|
chromedp.WaitVisible("#start-of-content", chromedp.ByID),
|
|
chromedp.Title(&title),
|
|
); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
fmt.Println(title)
|
|
|
|
// no expected output, to not run this test as part of 'go test'; it's
|
|
// too slow, requiring internet access.
|
|
}
|
|
|
|
func ExampleExecAllocator() {
|
|
dir, err := ioutil.TempDir("", "chromedp-example")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer os.RemoveAll(dir)
|
|
|
|
opts := []chromedp.ExecAllocatorOption{
|
|
chromedp.NoFirstRun,
|
|
chromedp.NoDefaultBrowserCheck,
|
|
chromedp.Headless,
|
|
chromedp.DisableGPU,
|
|
chromedp.UserDataDir(dir),
|
|
}
|
|
|
|
allocCtx, cancel := chromedp.NewAllocator(context.Background(),
|
|
chromedp.WithExecAllocator(opts...))
|
|
defer cancel()
|
|
|
|
taskCtx, cancel := chromedp.NewContext(allocCtx)
|
|
defer cancel()
|
|
|
|
// ensure that the browser process is started
|
|
if err := chromedp.Run(taskCtx); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
path := filepath.Join(dir, "DevToolsActivePort")
|
|
bs, err := ioutil.ReadFile(path)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
lines := bytes.Split(bs, []byte("\n"))
|
|
fmt.Printf("DevToolsActivePort has %d lines\n", len(lines))
|
|
|
|
// Output:
|
|
// DevToolsActivePort has 2 lines
|
|
}
|
|
|
|
func ExampleNewContext_manyTabs() {
|
|
// new browser, first tab
|
|
ctx1, cancel := chromedp.NewContext(context.Background())
|
|
defer cancel()
|
|
|
|
// ensure the first tab is created
|
|
if err := chromedp.Run(ctx1); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
// same browser, second tab
|
|
ctx2, _ := chromedp.NewContext(ctx1)
|
|
|
|
// ensure the second tab is created
|
|
if err := chromedp.Run(ctx2); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
c1 := chromedp.FromContext(ctx1)
|
|
c2 := chromedp.FromContext(ctx2)
|
|
|
|
fmt.Printf("Same browser: %t\n", c1.Browser == c2.Browser)
|
|
fmt.Printf("Same tab: %t\n", c1.Target == c2.Target)
|
|
|
|
// Output:
|
|
// Same browser: true
|
|
// Same tab: false
|
|
}
|