@9ikhan 的答案对于获取属性是正确的,但我认为值得一提的是该答案的一个警告,如果实际上您正在寻找元素内容而不是属性值,则提供更直接的解决方案,正如您所建议的那样。
第 1 点:获取属性的语法。
定位器"//some-xpath-here/@attribute-name"
是标准 XPath 的正确语法,但是当涉及到属性时, Selenium 不使用标准 XPath!相反,它使用了这一点——注意删除了最后的 virgule:(正如@Wesley Wiser 在我的问题Complications with Selenium's GetAttribute method"//some-xpath-here@attribute-name"
中最初向我指出的那样)。标准 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 示例相同。请注意,我展示了两种变体——一种用于属性,一种用于内容,因此您可以取消注释要测试的一种。
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']");