ブラウザでのXPathクエリによる属性を取得するが、ロボットフレームワークでは成功しない
-
21-12-2019 - |
質問
私はXPath Helper-Pluginを介してChromeで実行したときに完全に望ましい値を返す特定のHTML要素からの高さを取得するために使用する特定のxpath-queryがあります。
//*/div[@class="BarChart"]/*[name()="svg"]/*[name()="svg"]/*[name()="g"]/*[name()="rect" and @class="bar bar1"]/@height
.
しかし、Robot Frameworkのget要素属性キーワードで同じクエリを使用すると、
Get Element Attribute//*/div[@class="BarChart"]/*[name()="svg"]/*[name()="svg"]/*[name()="g"]/*[name()="rect" and @class="bar bar1"]/@height
.
...それから私はこのXPathに関するInvalidseLectorexceptionを得ました。
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"]/`
.
だから、ロボットフレームワークまたはセレンは@ -signとすべてを削除しました。私はそれが脱出だと思いました - @heightの前にいくつかのスラッシュを追加しましたが、失敗しました。また、このクエリの結果をstring() - コマンドでカプセル化しようとしましたが、これも失敗しました。
誰かがXPath-Queryが壊れているのを防ぐためのアイデアを持っていますか?
解決
ロボットを使用しているときにXPath自体に属性軸を含めることはできません。XPathで要素を取得してから、その属性名を指定する必要があります。構文がこのようなものであるようです。
Get Element Attribute xpath=(//*/div[@class="BarChart"]/*[name()="svg"]/*[name()="svg"]/*[name()="g"]/*[name()="rect" and @class="bar bar1"])@height
.
またはおそらく(私はロボットを使ったことがない):
Get Element Attribute xpath=(//*/div[@class="BarChart"]/*[name()="svg"]/*[name()="svg"]/*[name()="g"]/*[name()="rect" and @class="bar bar1"])[1]@height
.
を言う
attribute_locatorは、要素ロケータとそれに続く@ signと属性の名前、たとえば "element_id @ class"などで構成されています。
だから私は私が上記の投稿者が正しいトラックにあると思います。
他のヒント
最後の@
の後にキーワードがすべてを削除するように思われるというあなたの観察で正しいです。もっと正確には、@
を使用して要素ロケータを属性名から区切り、その最終的な@
文字で文字列を分割することによってこれを行います。
この時点での解析が解析されていないため、コードが解析していないため、問題を解決することはありません。これは、その操作を実行する正確なコード(この書き込み中...)です。
def _parse_attribute_locator(self, attribute_locator):
parts = attribute_locator.rpartition('@')
...
.
シンプルな解決策は、その末尾のスラッシュを落とすことです。XPathは次のようになります。
//*/div[@class="BarChart"]/... and @class="bar bar1"]@height`
.