2016-07-20 24 views
0

versucht, Xpath in einer Seite zu finden. Hier ist mein Code.Wie man den Xpath in Behat Selen

$session = $this->getSession(); 
    $found = $session->getPage()->findAll('xpath', '//meta[@name ="description"]/@content'); 
    if (is_null($found)) { 
     throw new \Exception(sprintf("Could not find meta %s='%s' with '%s'",)); 
    } 

geben Fehler

invalid selector: The result of the xpath expression "//html//meta[@name ="description"]/@content" is: [object Attr]. It should be an element. (Session info: chrome=51.0.2704.103) (Driver info: chromedriver=2.21.371459 (36d3d07f660ff2bc1bf28a75d1cdabed0983e7c4),platform=Mac OS X 10.10.5 x86_64) (WARNING: The server did not provide any stacktrace information)

Antwort

1

Mit ‚@content‘ wird das Attribut Inhalt zurückgeben, könnte dies keinen gültigen Selektor zurück, wenn Behat auf XPath zu übersetzen.

Wenn Sie dieses Attribut angeben müssen, sollten Sie es wie folgt verwenden:

//meta[@name ="description"][@content] 

Bitte beachten Sie auch, dass findAll Array zurückgibt und nicht ein einzelnes Element, können Sie das erste Element Anpassung der Wähler finden benutzen finden gegeben.

Wenn Sie einen Wert eines Attributs erhalten oder den Text abrufen müssen, können Sie Methoden wie getAttribute ('attribute_name') oder getText() verwenden.

In Ihrem Fall können Sie so etwas wie haben:

$found->getAttribute('name'); 

oder

$found->getText(); 
+0

Erste neue Fehler danach. ungültiger Selektor: Ein Element mit dem xpath-Ausdruck // html // meta [@name = "description"] @ content konnte aufgrund des folgenden Fehlers nicht gefunden werden: SyntaxError: Fehler beim Ausführen von 'evaluate' auf 'Document': Der string '// html // meta [@name = "description"] @ content' ist kein gültiger XPath-Ausdruck. – mks

+0

den exakten Selektor kopieren, den ich gab, mit @content in eckigen Klammern eingeschlossen – lauda

+0

oops, das funktionierte, gibt es eine Weise, die ich einen Wert an diesem xpath erhalten kann? – mks