2017-05-16 3 views
1

ich das Selen Paket Go mit https://godoc.org/github.com/tebeka/seleniumGolang Selen-Paket - eine Verbindung mit Selen-Server und ohne Kopf Chrom

Und ich bin mit Maden Chrom + Selen-Server innerhalb eines Docker-Container auf localhost:4444

Der Server scheint in Ordnung zu sein, da ich die Web-Konsole über http://localhost:4444/wd/hub/static/resource/hub.html

zugreifen Aber ich versuche, das „Hallo Welt“ -Beispiel zu bekommen mit dem vorhandenen docker Behälter zu arbeiten.

Dies ist das Beispiel aus der GoDocs Seite für die Selen-Treiber:

// Run some code on play.golang.org and display the result 
package main 

import (
    "fmt" 
    "time" 

    "github.com/tebeka/selenium" 
) 

var code = ` 
package main 
import "fmt" 

func main() { 
    fmt.Println("Hello WebDriver!\n") 
} 
` 

// Errors are ignored for brevity. 

func main() { 
    // Connect to the selenium server 
    caps := selenium.Capabilities{"browserName": "firefox"} 
    wd, err := selenium.NewRemote(caps, "http://127.0.0.1:4444") 
    if err != nil { 
     fmt.Println(err) 
    } 
    defer wd.Quit() 

    // Get simple playground interface 
    wd.Get("http://play.golang.org/?simple=1") 

    // Enter code in textarea 
    elem, _ := wd.FindElement(selenium.ByCSSSelector, "#code") 
    elem.Clear() 
    elem.SendKeys(code) 

    // Click the run button 
    btn, _ := wd.FindElement(selenium.ByCSSSelector, "#run") 
    btn.Click() 

    // Get the result 
    div, _ := wd.FindElement(selenium.ByCSSSelector, "#output") 

    output := "" 
    // Wait for run to finish 
    for { 
     output, _ = div.Text() 
     if output != "Waiting for remote server..." { 
      break 
     } 
     time.Sleep(time.Millisecond * 100) 
    } 

    fmt.Printf("Got: %s\n", output) 
} 

ich die "browserName"-"chrome" Wechsel versucht, aber ich bekomme diese Fehlermeldung:

panic: got content type "text/html", expected "application/json" 

goroutine 1 [running]: 
main.main() 
    /home/user01/Code/golang_src/golang_exercises/33_selenium/selenium.go:28 +0x457 
exit status 2 

ich nichts finden kann in der GoDoc Selen Dokumentation zum Chrome Browser und wie man sich über den Selen-Server damit verbindet.

Ich würde mich über Hinweise freuen, was hier schief gehen könnte.

Update:

Es scheint, dass das Entfernen der URL-Adresse und verlassen es leer die Verbindungsprobleme behoben ist:

wd, err := selenium.NewRemote(caps, "") 

Das heißt, ich habe immer noch Probleme mit dem Beispiel. Hauptsächlich scheint es, als ob es sich mit der Go Playground Website verbindet, bekommt die richtigen Elemente, aber wenn es darum geht, die Eingabe elem.SendKeys(code) zu senden, sendet es es nicht richtig und das Textfeld ist leer. Was zu schlechten Ausgang aus dem Spielplatz:

Got: can't load package: package main: 
tmp/sandbox573608783/main.go:1:1: expected 'package', found 'EOF' 

Program exited. 

Antwort

0

Nach einigen Debuggen Ich fand heraus, dass das Problem auf die Tatsache zurückzuführen war, dass mein Docker Behälter nicht den X-Server im Innern hat.

Wenn das Selen Paket Eingang zu senden versucht es diese Fehlermeldung erzeugen würde:

unknown error: unknown error: an X display is required for keycode conversions, consider using Xvfb 
    (Session info: headless chrome=60.0.3095.5) 
    (Driver info: chromedriver=2.29.461571 (8a88bbe0775e2a23afda0ceaf2ef7ee74e822cc5),platform=Linux 4.4.0-77-generic x86_64) (WARNING: The server did not provide any stacktrace information) 
Command duration or timeout: 40 milliseconds 
Build info: version: '3.3.1', revision: '5234b32', time: '2017-03-10 09:04:52 -0800' 
System info: host: 'e3bf5382c62d', ip: '171.14.0.3', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-77-generic', java.version: '1.8.0_121' 
Driver info: org.openqa.selenium.chrome.ChromeDriver 
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, networkConnectionEnabled=false, chrome={chromedriverVersion=2.29.461571 (8a88bbe0775e2a23afda0ceaf2ef7ee74e822cc5), userDataDir=/tmp/.org.chromium.Chromium.mFhqlU}, takesHeapSnapshot=true, pageLoadStrategy=normal, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=60.0.3095.5, platform=LINUX, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true, unexpectedAlertBehaviour=}] 
Session ID: 681f9de5f91baeaaa3100cf297767a2d 

I innerhalb des Docker Container den X-Server installiert haben, noch nicht, aber ich bin zuversichtlich, dass er den Fehler zu beheben, dass tritt auf, wenn eine Eingabe über Selen an die Headless-Chrom-Instanz gesendet wird.

0

ich auch Selen in Docker verwenden, kann es durch diese laufen:

wd, err := selenium.NewRemote(caps, "http://127.0.0.1:4444/wd/hub")