Das Abrufen des Attributs über eine XPath-Abfrage ist im Browser erfolgreich, jedoch nicht im Robot Framework

StackOverflow https://stackoverflow.com//questions/23012376

Frage

Ich habe eine bestimmte XPATH-Abfrage, mit der ich die Höhe eines bestimmten HTML-Elements erhalte, die mir perfekt den gewünschten Wert zurückgibt, wenn ich sie in Chrome über das XPath Helper-Plugin ausführe.

//*/div[@class="BarChart"]/*[name()="svg"]/*[name()="svg"]/*[name()="g"]/*[name()="rect" and @class="bar bar1"]/@height

Wenn ich jedoch dieselbe Abfrage über das Schlüsselwort „Get Element Attribute“ im Robot Framework verwende

Get Element Attribute//*/div[@class="BarChart"]/*[name()="svg"]/*[name()="svg"]/*[name()="g"]/*[name()="rect" and @class="bar bar1"]/@height

...Dann bekam ich eine InvalidSelectorException bezüglich dieses XPATH.

InvalidSelectorException: Message: u'invalid selector: Unable to locate an 
element with the xpath expression `//*/div[@class="BarChart"]/*[name()="svg"]/*
[name()="svg"]/*[name()="g"]/*[name()="rect" and @class="bar bar1"]/`

Also hat das Robot Framework oder Selenium das @-Zeichen und alles danach entfernt.Ich dachte, es sei ein Escape-Problem und habe vor der @height einige Schrägstriche hinzugefügt und entfernt, aber ohne Erfolg.Ich habe auch versucht, das Ergebnis dieser Abfrage im string()-Befehl zu kapseln, aber auch das war erfolglos.

Hat jemand eine Idee, um zu verhindern, dass meine XPATH-Abfrage kaputt geht?

War es hilfreich?

Lösung

Es sieht so aus, als ob Sie die Attributachse nicht in den XPath selbst aufnehmen können, wenn Sie Roboter verwenden.Sie müssen das Element von XPath abrufen und dann den Attributnamen außerhalb angeben.Es scheint, als ob die Syntax so etwas ist:

generasacodicetagpre.

oder vielleicht (ich habe noch nie Roboter verwendet):

generasacodicetagpre.

Diese Dokumentation sagt

attribut_locator besteht aus Element Locator, gefolgt von einem @ -Zeichen und Attributnamen, zum Beispiel "element_id @ class".

Ich denke, was ich oben gepostet habe, ist auf dem richtigen Weg.

Andere Tipps

Sie haben Recht mit Ihrer Beobachtung, dass das Schlüsselwort scheinbar alles nach dem Finale entfernt @.Genauer gesagt verwendet es das @ um den Element-Locator vom Attributnamen zu trennen, und zwar durch Aufteilen der Zeichenfolge an diesem Ende @ Charakter.

Keine noch so große Escape-Maßnahme wird das Problem lösen, da der Code zu diesem Zeitpunkt keine Analyse durchführt.Dies ist der genaue Code (zum Zeitpunkt dieses Schreibens...), der diesen Vorgang ausführt:

def _parse_attribute_locator(self, attribute_locator):
    parts = attribute_locator.rpartition('@')
    ...

Die einfache Lösung besteht darin, den abschließenden Schrägstrich wegzulassen, sodass Ihr XPath wie folgt aussieht:

//*/div[@class="BarChart"]/... and @class="bar bar1"]@height`
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top