使用selenium获取下拉列表或多选列表中的项目顺序

jav*_*thu 1 selenium fixture multi-select drop-down-menu

使用selenium我想得到项目的顺序,或者更确切地说是多选列表或下拉列表的键列表.在selenium API中看到我看到我们可以获得所选项目的索引,但我想获得所有项目的索引或键.可能吗?如果还没怎么样?或者,如果我可以获得列表项目索引和值也应该没问题.或者无论如何为列表框/多选列表一次获取一个键或值?

实际上我想验证给定的项目是否正确.

(事实上​​我想提供一个夹具来验证给定的项目是否有序.比如说列表框包含A,B,C,D,E,有些人用这个API调用(新的字符串("A,B,c, D,E"),dropDownLocator)然后它应该返回true否则为false.)

Mic*_*ens 5

从@ 9ikhan答案是获得属性正确的,但我认为这是值得一提的一点需要特别注意这个问题的答案,加上的话,实际上,你正在寻找的元素含量,而不是属性值,你的建议提供了一个更简单的解决方案.

第1点:获取属性的语法.

定位器"//some-xpath-here/@attribute-name"是标准的XPath正确的语法,但是当它涉及到属性硒并没有使用标准的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>
Run Code Online (Sandbox Code Playgroud)

我的代码片段恰好在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);
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您只想要内容,则存在一个更简单的解决方案:

// Get element content:
// Returns: cookie, donut, muffin
string[] items = selenium.GetSelectOptions("//select[@id='bakedgoods']");
Run Code Online (Sandbox Code Playgroud)