Techioz Blog

Seleniumを使用してtag_nameで最も近い親を見つける方法

概要

selenium-webdriver を使用して「テーブル スタイル」Web サイトを操作しています。

テーブルのネストが多数あり、それらには id 属性や name 属性がありません。

そこで、テーブル内のヘッダー テキストを取得して、このようなデータの場所を見つけることにしました。

 driver = Selenimum::WebDriver.for :firefox
 element = driver.find_element(:xpath,
   "//font[@color='#FFFFFF' and text()='some probably unique text']")

このようなHTMLから。

<table><tbody>
...
<table><tbody><tr><td><font color="#FFFFFF">
  some probably unique text
</font></td></tr></table>
...
</tbody></table>

上記のコードで取得したfont要素から内部のtable要素を取得したいと考えています。 element.find_element(:xpath, “../../../..”) で取得できることはわかっていますが、少し嫌です。

せめてこのelement.find_element(:xpath, “../*/table”)のようなタグ名を指定したいです。

これを行う方法はありますか?

解決策

XPath 軸の祖先を使用できます。

element = driver.find_element(:xpath, ".//font[@color='#FFFFFF' and text()='some probably unique text']/ancestor::table")

またはネストされた XPath: あなたのようなネストされたテーブルの状況ではありません

element = driver.find_element(:xpath, ".//table[.//font[@color='#FFFFFF' and text()='some probably unique text']]")