XPathが変わる例

2022年12月18日

WinGoferではXPathを用いて画面の要素を取得します。XPathはHTMLの構造に依存するため、対象ページのHTMLが変わると、XPathも変わる可能性があります。

XPathが変わる例

氏名
住所
電話
mail

追加ボタンで携帯電話のテキストボックスを追加します。

上のフォームで、mail欄は上からフォーム内で4番目の<input>要素です。しかし、追加ボタンでテキストボックスを増やすと5番目になります。

この場合のXPathは次のようになります。

追加前//form[@id="input_form"]/input[4]
追加後//form[@id="input_form"]/input[5]
mail欄のXPath

そして、追加前の //form[@id="input_form"]/input[4] は、新たに追加された携帯電話のテキストボックスのXPathとなります。

変更に強いXPath

このように対象サイトのHTMLが変更された場合、XPathが変わる可能性があるため、できるだけページの変更に強いXPathを選んでおく必要があります。

例えば、上の例では<input>要素にはname属性が指定されています。一般的に、id属性やname属性は変更されにくい属性とされています。
一方、class属性はスタイルシートの指定に利用します。要素の書式情報に関係するため、特にコンシュマー向けのサイトでは、業務用サイトと比べると、変更される可能性が高くなります。

あらためてmail欄のXPathをname属性で指定すると
 //input[@name="mail"]
となり、追加ボタンが押されてもXPathが変わることはありません。

テキストが変わる例

上のフォームの「追加」ボタンは携帯電話欄を追加した後、「削除」ボタンに変わります。XPathは以下のようになります。

追加前//button[text()="追加"]
追加後//button[text()="削除"]
ボタンのXPath

「追加」だけの操作なら、 //button[text()="追加"] でもOKですが、「削除」もするのなら、id属性を使用して
 //button[@id="view_mobile"]
が良いでしょう。

XPath取得ツール

ブラウザの開発者ツールではid属性のみでXPathを取得しますが、XPath取得ツールは様々な属性でXPathを取得することができます。

mail欄のXPath
ブラウザ開発者ツール//*[@id="input_form"]/input[4]
XPath取得ツール//input[@name="mail"]
mail欄のXPath
ボタンのXPath
ブラウザ開発者ツール//*[@id="view_mobile"]
XPath取得ツール//button[@id="view_mobile"]

解析対象からid属性を外せは、テキストで取得することも可能です。

テキストでの取得