@ 9ikhanからの回答は属性を取得するために正しいですが、その回答に関する1つの警告に言及する価値があると思います。さらに、実際に属性値ではなく要素コンテンツを探している場合は、より簡単な解決策を提供します。
ポイント1:属性を取得するための構文。
ロケーター"//some-xpath-here/@attribute-name"
は標準のXPathの正しい構文ですが、属性に関しては、 Seleniumは標準のXPathを使用しません。むしろ、これを使用します-最後のvirguleの削除に注意"//some-xpath-here@attribute-name"
してください:(私の質問で@Wesley Wiserによって最初に指摘されたようにSeleniumのGetAttributeメソッドの合併症)。この例のように、標準のXPath構文が機能する特定の特殊なインスタンスが存在する場合がありますが、一般に、Selenium構文を使用する必要があることに注意してください。
ポイント2:属性の代わりに要素コンテンツを取得する。
これが同じコードの私のバージョンです。まず、コンテンツから属性値を明確に描写するために改訂されたHTML:
<html>
<body>
<select id ="bakedgoods">
<option value="1">cookie</option>
<option value="2">donut</option>
<option value="3">muffin</option>
</select>
</body>
</html>
そして、私のコードフラグメントはたまたまC#にありますが、それは前のJavaの例と実質的に同じです。2つのバリエーションを示したことに注意してください。1つは属性用、もう1つはコンテンツ用なので、テストするもののコメントを外すことができます。
var optionCount = (int) selenium.GetXpathCount("//select[@id='bakedgoods']/option");
var optionList = new List<String>();
for (int i = 1; i <= optionCount; i++)
{
// Get element content:
// Returns: cookie, donut, muffin
String option = selenium.GetText("//select[@id='bakedgoods']/option[" + i + "]");
// Get attributes:
// Returns: 1, 2, 3
//String option = selenium.GetAttribute("//select[@id='bakedgoods']/option[" + i + "]@value");
optionList.Add(option);
}
ただし、コンテンツが必要な場合は、はるかに簡単なソリューションがあります。
// Get element content:
// Returns: cookie, donut, muffin
string[] items = selenium.GetSelectOptions("//select[@id='bakedgoods']");