Ответ от @ 9ikhan является правильным для получения атрибутов, но я думаю, что стоит упомянуть одно предостережение с этим ответом, плюс предоставление более простого решения, если, на самом деле, вы ищете содержимое элемента, а не значения атрибута, так каквы предлагаете.
Точка 1: Синтаксис для получения атрибута.
Локатор "//some-xpath-here/@attribute-name"
является правильным синтаксисом для стандартного XPath, но , когда дело доходит до атрибутов Selenium не использует стандартный XPath!Скорее, он использует это - обратите внимание на удаление окончательного virgule: "//some-xpath-here@attribute-name"
(как первоначально указал мне Уэсли Вайзер в моем вопросе Осложнения с помощью метода GetAttribute Selenium ).Могут быть некоторые специфические случаи, когда стандартный синтаксис 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']");